随笔分类 -  LeetCode

摘要:2039. 网络空闲的时刻 Solution 思路:一开始以为多源最短路径,但是n太大了,突然看到边权都是1,所以可以直接BFS,然后再根据每个点到源点的距离以及重发时间求最大即可。可以考虑三种情况: \(patience\ge2*distance\):应为$2*distance + 1$ \(pa 阅读全文
posted @ 2022-03-20 16:15 Frontierone 阅读(46) 评论(0) 推荐(0)
摘要:606. 根据二叉树创建字符串 Solution 思路:最开始的思路就是简单的先序遍历,然后就可以得到带有空括号的字符串,再处理即可,代码都写了,然后发现有问题,还是在遍历的时候控制比较好,然后就开始无脑乱改,发现逻辑是通的,不过代码已经成狗屎了,删了重新写,梳理逻辑,1Y 主要是叶节点和非叶节点的 阅读全文
posted @ 2022-03-19 10:54 Frontierone 阅读(25) 评论(0) 推荐(0)
摘要:397. 整数替换 Solution 思路:BFS或者DFS,但是最大范围是2^31-1,会超出int的最大范围。还可以进行记忆化搜索。题解中面对奇数的情况,可以等效为2步到达偶数,即$2+Math.min(dfs(\frac{val +1}{2},dfs(\frac{val-1}{2}))\(,这 阅读全文
posted @ 2022-03-18 11:34 Frontierone 阅读(62) 评论(0) 推荐(0)
摘要:102. 二叉树的层序遍历 Solution 思路:搞一个深度,然后放到对应的层次里。这里开List嵌套的时候有点坑,不过根据list的容量大小和层次的高度关系,来进行创建。这里的NewNode不能共用。题解代码是 用for循环搞出来那一层的。普通的BFS是弹出一个。见下面代码二。 更新:LeetC 阅读全文
posted @ 2022-03-17 23:57 Frontierone 阅读(25) 评论(0) 推荐(0)
摘要:20. 有效的括号 Solution 思路:左边入栈,遇到右边判断即可,最后看堆栈是否为空。 class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); char[] str 阅读全文
posted @ 2022-03-16 21:46 Frontierone 阅读(28) 评论(0) 推荐(0)
摘要:3. 无重复字符的最长子串 Solution 思路:刚开始考虑是map记录下标,然后重复的话就看map的下标位置,得到极大子串的长度,但是没有考虑到这个过程中是可以维护出不重复的字串的,通过几个样例模拟,然后就以为map只是一开始用到了,后面都是靠的下标去得到子串长度,不删除的话还不好维护,没往删除 阅读全文
posted @ 2022-03-14 20:18 Frontierone 阅读(25) 评论(0) 推荐(0)
摘要:2. 两数相加 Solution 思路:模拟。自己的写法是两个一起循环,其中一个结束就停止循环,再处理另一个链表,不过也可以一直循环,但是可以直接连接过去,然后就是考虑进位。 //class ListNode { // int val; // ListNode next; // ListNode() 阅读全文
posted @ 2022-03-13 13:41 Frontierone 阅读(27) 评论(0) 推荐(0)
摘要:1. 两数之和 Solution 思路1:直接双重for循环,枚举每个数字,找到后返回结果 class Solution { public int[] twoSum(int[] nums, int target) { int len = nums.length; for (int i = 0; i 阅读全文
posted @ 2022-03-13 11:24 Frontierone 阅读(20) 评论(0) 推荐(0)
摘要:540. 有序数组中的单一元素 Solution 思路:异或遍历一遍,相同数字异或为0,异或结果即为单个数字的值。时间复杂度O(n) class Solution { public int singleNonDuplicate(int[] nums) { int m = nums.length; i 阅读全文
posted @ 2022-02-16 12:06 Frontierone 阅读(26) 评论(0) 推荐(0)
摘要:1380. 矩阵中的幸运数 Solution 思路:自己的思路就是遍历两遍数组,然后另开计数数组,如果同一个位置被计两次,则为幸运数。时间复杂度和空间复杂度都是O(mn),看了题解是可以在遍历的时候直接判断的,时间复杂度为O(mn*(m+n),空间复杂度为O(1),因为不需要另开保存结果。还有一个方 阅读全文
posted @ 2022-02-16 11:18 Frontierone 阅读(48) 评论(0) 推荐(0)
摘要:1765. 地图中的最高点 Solution 思路:开始的思路是直接把水域固定,然后扩散,但是扩散的方式不对,我是默认一圈的最小值直接加1,但是会出现问题,正确做法多源BFS,就是全部默认为-1,然后从水域开始做BFS,如果遇到不是-1的格子,说明一定是从之前的水域出发了,所以不能重复更新,不然就不 阅读全文
posted @ 2022-02-06 20:19 Frontierone 阅读(30) 评论(0) 推荐(0)
摘要:1996. 游戏中弱角色的数量 Solution 思路:见过类似的,就知道是排序。需要满足都是小于,才算是一个弱角色。因此可以按照攻击降序排序,那么就保证了攻击是满足了,不过要实现防御也要小于,就需要攻击相同时,按照防御升序排列,如果出现当前防御比之前角色小的,那么一定是攻击值不一样且之前的更大的角 阅读全文
posted @ 2022-02-06 15:30 Frontierone 阅读(27) 评论(0) 推荐(0)
摘要:1725. 可以形成最大正方形的矩形数目 Solution 思路:就直接遍历一遍,哈希表记录每个矩形的最大边的次数,同时维护最大值即可。 class Solution { Map<Integer, Integer> sides = new HashMap<Integer, Integer>(); p 阅读全文
posted @ 2022-02-06 14:43 Frontierone 阅读(32) 评论(0) 推荐(0)
摘要:1748. 唯一元素的和 Solution 思路:看值域范围非常小,可以直接数组存值,就数组记录出现次数即可。 class Solution { public int sumOfUnique(int[] nums) { int len = nums.length; int[] cnt = new i 阅读全文
posted @ 2022-02-06 14:39 Frontierone 阅读(27) 评论(0) 推荐(0)
摘要:1219. 黄金矿工 Solution 思路:第一个想法是有点类似数塔dp的感觉,但是这里的起点是随机,而且规模不大,所以可以逐个枚举起点,然后dfs搜索即可。长时间不写,判断新点是否可行时,传入了旧的点,人麻了。 class Solution { int ans = 0; int[][] grid 阅读全文
posted @ 2022-02-05 18:03 Frontierone 阅读(37) 评论(0) 推荐(0)
摘要:2013. 检测正方形 Solution 思路:和我的思路大概一致,我想的是枚举同一行,题解是枚举同一列,因为确定一个点,长度有了,其他的点也就确定。因此枚举查询点同一列的点,然后距离有了,就在这两个高度的行中找对应的点是否存在。 class DetectSquares { Map<Integer, 阅读全文
posted @ 2022-01-27 21:51 Frontierone 阅读(41) 评论(0) 推荐(0)
摘要:2047. 句子中的有效单词数 Solution 思路:简单模拟题,首先将单词划分开,然后根据条件一个一个否定即可。标记连接符和标点符号的位置,进行判断,这里注意特判是在数值为1的时候做的。 class Solution { public int countValidWords(String sen 阅读全文
posted @ 2022-01-27 20:47 Frontierone 阅读(31) 评论(0) 推荐(0)
摘要:2045. 到达目的地的第二短时间 Solution 思路:求路径 然后再根据路径的长度算时间。这里使用BFS来维护最短路和次短路,然后根据次短路的长度来计算总时间。 class Solution { public int secondMinimum(int n, int[][] edges, in 阅读全文
posted @ 2022-01-26 22:06 Frontierone 阅读(42) 评论(0) 推荐(0)
摘要:2034. 股票价格波动 Solution 思路一:有序集合+哈希表 查询最新股票价格:维护最大的时间戳 哈希表直接查询。 最高,最低价格查询:维护股票价格的有序集合。 由于存在不同时间戳有相同的股票价格,因此股票价格需要记录出现次数,更新的时候维护即可。 class StockPrice { in 阅读全文
posted @ 2022-01-23 15:49 Frontierone 阅读(211) 评论(0) 推荐(0)
摘要:1345. 跳跃游戏 IV Solution 思路: 看到题目后,发现转化为无向图就可以了。然后就以为没事了,发现大意了,因为重复的值可能有很多,导致图非常的稠密,最后会导致TLE,这里学习了可以去子图的方法,因为相等的值会在第一次进去子图时将其他的点都入队,不需要遍历其他点时再进入该子图,因此可以 阅读全文
posted @ 2022-01-22 15:00 Frontierone 阅读(35) 评论(0) 推荐(0)