随笔分类 - leetcode题目
记录leetcode刷题做题笔记
摘要:题目: 思路: 【1】广度搜索处理感染问题 代码展示: //时间1 ms 击败 100% //内存39.9 MB 击败 91.75% class Solution { /** * 坏橘子感染好橘子,就是扩散的方式,这种用广度搜索的方式是最好处理的 * @param grid * @return */
阅读全文
摘要:题目: 思路: 【1】动态规划的方式 【2】数学公式的方式(依据 四平方和定理 ) 同时四平方和定理包含了一个更强的结论: 当且仅当 n≠4^k×(8m+7) 时,n 可以被表示为至多三个正整数的平方和。 因此,当 n=4^k×(8m+7) 时,n 只能被表示为四个正整数的平方和。此时我们可以直接返
阅读全文
摘要:题目: 思路: 【1】模拟的方式 杨辉三角形本质上可以转换成这种形式 0:1 1:1 1 2:1 2 1 3:1 3 3 1 这里存在规律,就是首尾都必须是1, 且中间部分的值为 当第三层的时候 下标为1的3的值是由第二层的下标0+下标1的值组合成的 故A[3][1] = A[2][0] + A[2
阅读全文
摘要:题目: 思路: 【1】利用广度搜索,相当于向四个方向各自分一个分身去走,碰到障碍物则该分身消失,然后每个分身到了下个位置再次分出四个走下一个位置,这样每一层的分身的步数其实是一致的,当有一个分身到了边界,那么这个位置就是最短的路径的出口。 代码展示: //时间5 ms 击败 61.7% //内存44
阅读全文
摘要:题目: 思路: 【1】利用深度优先搜索求出其中的一座岛,然后利用广度优先搜索来找到两座岛的最短距离 我们通过遍历找到数组 grid 中的 1 后进行深度优先搜索,此时可以得到第一座岛的位置集合,记为 island,并将其位置全部标记为 −1。 随后我们从 island 中的所有位置开始进行广度优先搜
阅读全文
摘要:题目: 思路: 【1】什么时候用BFS,什么时候用DFS 1.如果只是要找到某一个结果是否存在,那么DFS会更高效。 因为DFS会首先把一种可能的情况尝试到底,才会回溯去尝试下一种情况,只要找到一种情况,就可以返回了。 但是BFS必须所有可能的情况同时尝试,在找到一种满足条件的结果的同时,也尝试了很
阅读全文
摘要:题目: 思路: 【1】模拟的方式(这种方式虽然能跑,但是会超时) 【2】深度优先搜索 + 三色标记法(这种方式算是 模拟的方式 的优化版) 在深度优先搜索时,用三种颜色对节点进行标记,标记的规则如下: 白色(用 0 表示):该节点尚未被访问; 灰色(用 1 表示):该节点位于递归栈中,或者在某个环上
阅读全文
摘要:题目: 思路: 【1】广度优先遍历 假设输入为: int n = 11, headID = 4; int[] manager = new int[]{5,9,6,10,-1,8,9,1,9,3,4}, informTime = new int[]{0,213,0,253,686,170,975,0,
阅读全文
摘要:题目: 思路: 【1】这道题说是中等但是感觉偏简单,也就是要遍历传入数组的全部元素,同时还要注意如何防止出现死循环的可能即可。 代码展示: //深度遍历 //时间0 ms 击败 100% //内存42.1 MB 击败 28.26% class Solution { boolean[] vis; in
阅读全文
摘要:题目: 思路: 【1】广度优先搜索 代码展示: 【1】广度优先搜索 //时间4 ms 击败 69.78% //内存42.3 MB 击败 49.22% class Solution { public int snakesAndLadders(int[][] board) { int n = board
阅读全文
摘要:题目: 思路: 【1】利用二分进行优化 代码展示: //时间0 ms 击败 100% //内存40.2 MB 击败 35.97% class Solution { public boolean searchMatrix(int[][] matrix, int target) { int row =
阅读全文
摘要:题目: 思路: 【1】限制了时间复杂度那么便说明了必须要用二分来进行查找 代码展示: //时间0 ms 击败 100% //内存40 MB 击败 54.18% //时间复杂度: O(logn),其中 n 为 nums 数组的大小。 //整个算法时间复杂度即为二分查找的时间复杂度 O(logn)。
阅读全文
摘要:题目: 思路: 【1】皇后的走法是:可以横直斜走,格数不限。因此要求皇后彼此之间不能相互攻击,等价于要求任何两个皇后都不能在同一行、同一列以及同一条斜线上。 【2】基于集合的回溯(模拟的方式) 【3】基于位运算的回溯 代码展示: 【2】基于集合的回溯(模拟的方式) //时间3 ms 击败 37.25
阅读全文
摘要:题目: 思路: 【1】合并数组排序,然后计算 【2】二分查找 【3】划分数组 代码展示: 【1】合并数组排序,然后计算 //时间3 ms 击败 20.74% //内存43.3 MB 击败 51.79% class Solution { public double findMedianSortedAr
阅读全文
摘要:题目: 思路: 【1】本身这道题单次遍历其实就能做出来,但是考察点在于能不能对O(N)的时间复杂度进行优化,毕竟是有序的,所以可以考虑二分查找的方式。 代码展示: 利用二分查找的方式: //时间0 ms击败100% //内存44.4 MB击败44.65% //利用二分查找找到目标数字的下一个数字的开
阅读全文