![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
Rqff
这个作者很懒,什么都没留下…
展开
-
LeetCode周赛题解目录
周赛LeetCode第177场周赛LeetCode第178场周赛LeetCode第179场周赛双周赛原创 2020-03-08 12:47:33 · 1015 阅读 · 0 评论 -
98. 验证二叉搜索树(二叉树的遍历)
下面这个题虽然是二叉搜索树,但本质上仍然是遍历树,并且中序遍历二叉搜索树是得到的排列是有序的,我们可以考虑用中序遍历解决这一问题。98. 验证二叉搜索树假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示...原创 2020-05-05 19:22:16 · 117 阅读 · 0 评论 -
3. 无重复字符的最长子串(滑动窗口)
3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。思路:如果遍历所有子串并检查子串中字符是否重复,时间复杂度为O(n3),可以维护一个窗口,窗口中所有的字符...原创 2020-05-02 12:35:28 · 137 阅读 · 0 评论 -
5374. 长度为 n 的开心字符串中字典序第 k 小的字符串(回溯算法)
5374. 长度为 n 的开心字符串中字典序第 k 小的字符串List<String> res; //答案集合不能定义为StringBuilder类型剩下的就是回溯算法class Solution { char[] key = { 'a', 'b', 'c' }; //res不能定义为StringBuilder类型 List<String>...原创 2020-04-19 12:14:23 · 236 阅读 · 0 评论 -
质数判断&区间质数统计
204. 计数质数要求统计所有小于非负整数 n 的质数的数量。解法1.质数判断遍历每一个小于n的非负整数,判断是否是质数。时间复杂度O(nnn\sqrt{n}nn),超时class Solution { public int countPrimes(int n) { int res = 0; for (int i = 2; i < n; i++) { if (isp...原创 2020-04-12 10:05:10 · 521 阅读 · 0 评论 -
回溯问题
回溯问题,大多数用到DFS搜索,注意进入递归后即进入下一层搜索,但是当前方法并没有执行完,需要回溯,再次尝试下一种可能性。对于数据范围不大,需要遍历搜索,而使用普通循环又过于繁琐或根本不可行的时候,往往可以使用暴力搜索解决。17. 电话号码的字母组合class Solution { Map<Character, String> phone = new HashMap<Ch...原创 2020-04-09 17:15:07 · 247 阅读 · 0 评论 -
5350. 将整数按权重排序
5350. 将整数按权重排序topK的问题,可以考虑用堆来维护,比如说这个题,维护一个大小为k的最大堆(当然最大是自定义排序后的最大),那么在堆中的元素就是从小到大的元素。因为是大根堆,堆顶元素就是堆中的topK;元素入堆时:如果元素入堆时,加入元素比堆顶小,就更换堆顶元素;否则无操作通过维护一个堆(java中用优先队列实现),那么堆顶元素就是我们要的topK了。优化:另外就本题...原创 2020-03-22 09:33:13 · 1099 阅读 · 0 评论 -
LeetCode第180场周赛
5356. 矩阵中的幸运数暴力解法:时间复杂度:O(mn)class Solution { public List<Integer> luckyNumbers (int[][] matrix) { int m = matrix.length; int n = matrix[0].length; List<Integer> res ...原创 2020-03-15 21:34:15 · 139 阅读 · 0 评论 -
LeetCode第179场周赛
5352. 生成每种字符都是奇数个的字符串n为奇数全a,为偶数添加1个a,剩余全b,手速题。class Solution { public String generateTheString(int n) { StringBuilder sb = new StringBuilder(); if(n%2 == 0) { sb.append('a'); for (int i =...原创 2020-03-08 12:43:49 · 127 阅读 · 0 评论 -
面试题57 - II. 和为s的连续正数序列(尺取法)
面试题57 - II. 和为s的连续正数序列1.尺取法(滑动窗口)LeetCode中尺取法叫做滑动窗口,本题中,维护了两个窗口的左右端,sum为当前窗口的总和。如果i>target/2,必定有j>i,从而j+i必定大于target,所以只要窗口左端指针大于target/2,那么之后的窗口中的和再也不可能等于targetclass Solution { public int[]...原创 2020-03-06 11:24:10 · 120 阅读 · 0 评论 -
622. 设计循环队列 & 641. 设计循环双端队列
622. 设计循环队列额外定义了一个length用来保存当前循环队列中元素的个数,效率会降低一些,当初学习数据结构的时候,书上的做法是额外留了一个空间用来判断元素是否满或空,等到会学校再看看书吧。class MyCircularQueue { int[] queue; // 用数组模拟 int front; // 指向队首元素 int rear; // 指向队尾元素 int capac...原创 2020-03-04 16:25:49 · 218 阅读 · 0 评论 -
994. 腐烂的橘子(BFS)
994. 腐烂的橘子洪泛法class Solution { public int orangesRotting(int[][] grid) { int m = grid.length; int n = grid[0].length; int num = 0; //新鲜橘子的个数 Queue<Point> qu = new LinkedList<>();...原创 2020-03-04 09:02:12 · 100 阅读 · 0 评论 -
LeetCode第178场周赛
5344. 有多少小于当前数字的数字规模很小,暴力class Solution { public int[] smallerNumbersThanCurrent(int[] nums) { int[] res = new int[nums.length]; for (int i = 0; i < nums.length; i++) { int temp ...原创 2020-03-02 10:52:31 · 142 阅读 · 0 评论 -
5347. 使网格图至少有一条有效路径的最小代价
5347. 使网格图至少有一条有效路径的最小代价BFS中每个点只入列一次,但有时,我们可能需要bfs中允许一个点入列多次才能解决问题,这种方法就是SPFA。class Solution { public int minCost(int[][] grid) { int m = grid.length, n = grid[0].length; boolean[][] vis = ne...原创 2020-03-02 10:51:05 · 157 阅读 · 0 评论 -
LeetCode第177场周赛
第177场周赛第一次参加周赛,菜的一批,没做出来的会了再补。5169.日期之间隔几天5170.验证二叉树二叉树上有 n 个节点,按从 0 到 n - 1 编号,其中节点 i 的两个子节点分别是 leftChild[i] 和 rightChild[i]。只有 所有 节点能够形成且 只 形成 一颗 有效的二叉树时,返回 true;否则返回 false。如果节点 i 没有左子节点,那么 le...原创 2020-02-23 12:19:49 · 1032 阅读 · 0 评论 -
684. 冗余连接
684. 冗余连接rank优化的并查集,顺序遍历edges,如果边在同一连通分量,说明这条边是冗余的。时间复杂度:O(n)空间复杂度:O(n)class Solution { public int[] findRedundantConnection(int[][] edges) { int n = edges.length; Disjoint_Set...原创 2020-02-22 21:59:47 · 1084 阅读 · 0 评论 -
130. 被围绕的区域(DFS)
130. 被围绕的区域因为和边界连接的’O’不会改变,所以先从最层开始用DFS进行预处理,与边界连接的’O’做标记,预处理完再DFS进行改变。空间复杂度O(M*N)时间复杂度O(M*N)class Solution { int res = Integer.MIN_VALUE; int[][] dir = new int[][] { { 0, 1 }, { 0, -1 }...原创 2020-02-22 10:39:38 · 79 阅读 · 0 评论 -
695. 岛屿的最大面积(DFS)
695. 岛屿的最大面积依然DFS,加上最大值判断,跟200. 岛屿数量基本一模一样class Solution { int res = Integer.MIN_VALUE; int[][] dir = new int[][] { { 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 } }; int r; int c; int count; public ...原创 2020-02-22 09:29:43 · 81 阅读 · 0 评论 -
200. 岛屿数量(并查集、DFS)
200. 岛屿数量方法一、DFS或BFS遍搜索遍改变,访问数组也不需要class Solution { int res = Integer.MIN_VALUE; int[][] dir = new int[][] { { 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 } }; int r; int c; public int numIslands(ch...原创 2020-02-22 09:11:47 · 190 阅读 · 0 评论 -
547. 朋友圈(并查集)
547. 朋友圈经过路径压缩的并查集,时间复杂度近似看成O(1)时间复杂度:O(n2)空间复杂度:O(n)class Solution { public int findCircleNum(int[][] M) { Disjoint_Set ds = new Disjoint_Set(M.length); for (int i = 0; i < M.len...原创 2020-02-21 21:51:41 · 168 阅读 · 0 评论 -
152. 乘积最大子序列(简单dp)
152. 乘积最大子序列子串还能以O(n^2)的时间复杂度遍历,但是一看到…子序列,除非范围很小,否则暴力是别想了,考虑dp。思路跟之前做过的题很相似:最大整除子集思路:找乘积最大的连续子序列,那么我们就扫描一遍数组,维护一个最大值和一个最小值,因为有负数,如果出现负数,当前的最小值就变成了最大值。状态转移方程:max=Math.max(nums[i]∗max,nums[i]);min=...原创 2020-02-18 21:47:33 · 116 阅读 · 0 评论 -
611. 有效三角形的个数(双指针)
611. 有效三角形的个数方法一、暴力时间复杂度O(n^3)class Solution { public int triangleNumber(int[] nums) { int n = nums.length; int res = 0; Arrays.sort(nums); for (int i = 0; i < n; i++)...原创 2020-02-17 20:28:37 · 324 阅读 · 0 评论 -
368. 最大整除子集(类似LIS)
368. 最大整除子集先对数组排序,然后就很像最长上升子序列了,dp[i]就表示以nums[i]结尾的最大整除子集。转移方程:dp[i] = max{ dp[j] + 1} (0 <= j < i 且 A[j]%A[i] == 0)初始化:dp[i] = 1 (0 <= i < nums.length),另设路径数组path,用来记录回溯的路线。目标:max{dp[...原创 2020-02-17 15:54:21 · 188 阅读 · 0 评论 -
300. 最长上升子序列(LIS的优化)
300. 最长上升子序列这个题虽然是很早就做了,但是当初优化到O(nlogn),一直没能理解。dp[i]就表示以nums[i]结尾的最长上升子序列的长度。转移方程:dp[i] = max{ dp[j] + 1} (0 <= j < i )时间复杂度:O(n^2)class Solution { public int lengthOfLIS(int[] nums) {...原创 2020-02-17 15:53:02 · 205 阅读 · 0 评论 -
268. 缺失数字
268. 缺失数字方法三:位运算分析由于异或运算(XOR)满足结合律,并且对一个数进行两次完全相同的异或运算会得到原来的数,因此我们可以通过异或运算找到缺失的数字。算法我们知道数组中有 nn 个数,并且缺失的数在 [0…n][0…n] 中。因此我们可以先得到 [0…n][0…n] 的异或值,再将结果对数组中的每一个数进行一次异或运算。未缺失的数在 [0…n][0…n] 和数组中各出现一次...转载 2020-02-15 21:57:26 · 134 阅读 · 0 评论 -
258. 各位相加
258. 各位相加看了两三天的线代和设计模式,本来想刷道简单题,没想到也不是那么简单。。暴力就不做了,没什么意思。看两个例子:964 -> 19 -> 10 -> 1964=9∗105+19=9∗105+2∗9+1=9∗107+1964 = 9*105 + 19 = 9*105 + 2*9 + 1 = 9 *107 + 1964=9∗105+19=9∗105+2∗9...原创 2020-02-15 21:19:48 · 72 阅读 · 0 评论 -
79. 单词搜索 & 面试题12. 矩阵中的路径
79. 单词搜索DFS,黄金矿工是找深搜求和,更新最大值,这个题是深搜更新状态,如果满足状态继续深搜,不满足状态返回false,这条路线就不再走了,只要有一条路线符合要求,主方法中的dfs返回值就是true了。ps:不用按单词中的顺序DFS,只要网格中的一条合法字符串包含着单词就可以。class Solution { int res = Integer.MIN_VALUE; int[][...原创 2020-02-12 13:37:21 · 122 阅读 · 0 评论 -
147. 对链表进行插入排序
147. 对链表进行插入排序class Solution { public ListNode insertionSortList(ListNode head) { ListNode dummy = new ListNode(0);//dummy没有直接连接到head上 ListNode pre = dummy; ListNode cur =...原创 2020-02-12 12:59:55 · 141 阅读 · 0 评论 -
813. 最大平均值和的分组
813. 最大平均值和的分组dp[i][k] 表示将数组 A 中的前 i 个元素分成 k 个相邻的非空子数组,可以得到的最大分数。状态转移方程:dp(i, k) = max(dp(j, k - 1) + average(j + 1, i))dp(i, 0) = average(0, i)第一遍写代码,以正确为主。为了方便处理,将A数组的下标都加了1 ,放在temp数组里面了,反正d...原创 2020-02-12 11:28:09 · 162 阅读 · 0 评论 -
166. 分数到小数(模拟)
166. 分数到小数-1 -2147483648千算万算,没想到有这个样例…int的取值范围-231——231-1,也就是-2147483648——2147483647,输入并不越界,中间计算的时候就溢出了,要进行类型转换处理。还有一个点就是哈希表中存的是当前字符串的长度,便于出现循环节时,将左括号插入到字符串中。改之前的代码(溢出):class Solution { publi...原创 2020-02-11 14:34:31 · 96 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球
452. 用最少数量的箭引爆气球贪心策略:按点的结束坐标排序后,每次取最前面的点。多举几个例子就能直观的看出来,不管这个气球多长,只要扎破最后,并且已经排过序,所有的气球都能扎破,为什么是最优?猜的吧…区间覆盖问题,最大活动兼容问题跟这个都挺像的,几种贪心策略都尝试一下。LeetCode官方题解时间复杂度为排序的时间复杂度O(nlogn)class Solution { pub...原创 2020-02-11 11:58:37 · 91 阅读 · 0 评论 -
357. 计算各个位数不同的数字个数
357. 计算各个位数不同的数字个数有点像规律题n = 1,有0~9这10个数字n = 2,两位数有10*9-9=81个可能,再加上一位数的10个数,答案是91n = 3,三位数有81*8个可能,再加上一位数和两位数所以dp[i],就是i位数有几种可能,最后求和即可。class Solution { public int countNumbersWithUniqueDigits...原创 2020-02-10 19:43:41 · 524 阅读 · 0 评论 -
952. 按公因数计算最大组件大小
952. 按公因数计算最大组件大小两数有共同的大于1的公因数时,就在二者画一条边,问图的最大连通子图的大小。如果将数的因子作为根节点,把数一个个的挂上去,可以用并查集。参考自:大佬的题解class Solution { public int largestComponentSize(int[] A) { int maxvalue = Integer.MIN_VALUE; for ...原创 2020-02-10 16:24:47 · 287 阅读 · 0 评论 -
946. 验证栈序列
946. 验证栈序列双指针遍历,时间复杂度O(n)遍历要入栈的数组,将栈顶元素与验证数组比较,如果相等,就验证下一个数,如果不相等,就取下一个数入栈,如果是合法的出栈序列,最终栈是空的。class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { int ind...原创 2020-02-10 16:22:46 · 159 阅读 · 0 评论 -
1219. 黄金矿工
1219. 黄金矿工把之前写的DFS稍微一改就过了,没有进行过多的优化,30ms,还是挺慢的class Solution { int res = Integer.MIN_VALUE; int[][] dir = new int[][] { { 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 } }; int r; int c; int[][] map; b...原创 2020-02-10 10:45:25 · 201 阅读 · 0 评论 -
516. 最长回文子序列
516. 最长回文子序列子序列和子串是不同的,子序列是不连续的序列,而子串是连续的。这个题所求为最长的回文子序列,如果要遍历的话,时间复杂度为指数级别,肯定是超时的。这种要求为O(n^2)的时间复杂度,除了贪心,基本只有DP能做到了,那么子问题是什么呢?这样定义:如果已知区间 i - j 中最长的回文子序列长度为 dp[i] [j],那么区间 [i - 1,j + 1]有两种情况如果...原创 2020-02-09 17:03:47 · 206 阅读 · 0 评论 -
树的深度
有关深度的题:104. 二叉树的最大深度DFS递归:时间复杂度:O(N)空间复杂度:最坏O(N)(斜二叉树),最好O(logN)(完全二叉树)class Solution { public int maxDepth(TreeNode root) { return root == null ? 0 : Math.max(maxDepth(root.left), ma...原创 2020-02-07 19:31:06 · 832 阅读 · 0 评论 -
207. 课程表 & 210. 课程表 II (拓扑排序)
207. 课程表拓扑排序的BFS实现class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { if (numCourses <= 0) { return false; } // 特判 ...原创 2020-02-06 15:51:51 · 146 阅读 · 0 评论 -
1162. 地图分析(BFS)
1162. 地图分析用queue的添加元素时候,用offer不要用addQueue 中 add() 和 offer()都是用来向队列添加一个元素。在容量已满的情况下,add() 方法会抛出IllegalStateException异常,offer() 方法只会返回false做算法题有异常,直接就凉了。Modifier and TypeMethod and Descripti...原创 2020-02-06 10:42:37 · 162 阅读 · 0 评论 -
1306. 跳跃游戏 III
1306. 跳跃游戏 III隐式图问题DFSclass Solution { public boolean canReach(int[] arr, int start) { boolean[] visited = new boolean[arr.length]; return dfs(arr, start, visited); } public boolean dfs(int...原创 2020-02-06 09:38:06 · 178 阅读 · 0 评论