![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode刷题记录
文章平均质量分 59
jiachengren
爱打球的码农学生
展开
-
LeetCode 面试题 02.07. 链表相交
文章目录题目思路代码实现(Java)题目思路双指针一起遍历的思路a指针指向 headA, b 指针指向 headB, 两个指针一起向后遍历, 如果 a 指针走到了 headA 的末尾,则把 a 指针设置为 headB, 继续从 B链表开始遍历, 同理, b 指针和A一样,这样子一起遍历直到 a 与 b 相等,或者是 a 为空 , b 也为空。假设 链表A的长度为 lenA, B 的长度为 lenB, 链表A头节点到 交点的距离为 lena, 链表B头节点到交点的距离为 lenb有交点的原创 2021-05-21 18:45:34 · 196 阅读 · 2 评论 -
LeetCode 872. 叶子相似的树
文章目录题目思路代码实现(Java)思考总结题目思路先序遍历两个二叉树得到两个树的叶值序列,比较即可。代码实现(Java)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.v原创 2021-05-11 12:40:24 · 179 阅读 · 0 评论 -
LeetCode 面试题 02.01. 移除重复节点
文章目录题目思路代码实现(Java)深度思考HashMap实现HashMap对应的实现代码HashSet实现思考总结题目思路用一个Set集合保存每个节点的值,使用一前一后双指针,如果后指针遍历到的节点值出现过,则说明该节点为重复节点,则修改前指针的next指针的对象指向,删除重复节点。如果后指针遍历到的节点值没有出现在Set中,则前后指针都往后移动即可。代码实现(Java)/** * Definition for singly-linked list. * public class L原创 2021-05-10 13:46:54 · 156 阅读 · 2 评论 -
LeetCode 203. 移除链表元素
文章目录题目思路代码实现(Java)踩坑官方代码(Java)对比结果我的代码提交结果官网的代码提交结果题目思路看过之前链表题的题解有用一个哑节点的思路后,我想到了这题也可以用一个哑节点newHead,哑节点的下一个节点指向 head, 先用 res 指针保存newHead 然后用一前一后的双指针去遍历链表,后指针的值如果等于 val, 则满足题意需要删除,则把 前指针的 next 赋值为 后指针的 next,如果不等于的话,则直接把 前后指针都后移一个即可,最后就直接返回 res.next 即可。原创 2021-05-09 20:11:26 · 136 阅读 · 1 评论 -
LeetCode 19. 删除链表的倒数第 N 个结点
文章目录题目思路我的代码实现(Java)官方的代码实现(Java)对比代码优雅度效率对比我的代码官网代码总结题目思路我的思路是直接利用双指针,找到倒数第N个节点的前驱节点,利用前驱节点删除倒数第N个节点。我的代码实现(Java)/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} *原创 2021-05-06 13:15:18 · 109 阅读 · 0 评论 -
LeetCode 690. 员工的重要性
文章目录题目思路代码实现(Java)踩坑题目思路很容易想到的深度优先搜索,每次都先令 cnt 等于编号为当前 id 的 Employee 的 importance , 然后对当前对象所存储的下直系下属进行递归调用本函数,最后返回累加的 cnt 值即可。代码实现(Java)/*// Definition for Employee.class Employee { public int id; public int importance; public List&l原创 2021-05-01 23:02:29 · 128 阅读 · 1 评论 -
LeetCode 797. 所有可能的路径
文章目录题目思路代码实现(Java)踩坑记录后记题目思路经典DFS深搜+回溯算法,模板题目。以0节点为起点,递归所有可以从0节点出发到达的节点,在递归的同时把路径节点保存到 tmp 中,如果到达的节点为题目要求的最后一个节点,则把 tmp 添加到 答案 res 中。代码实现(Java)class Solution { public List<List<Integer>> allPathsSourceTarget(int[][] graph) {原创 2021-04-30 15:55:43 · 309 阅读 · 5 评论 -
LeetCode 123. 买卖股票的最佳时机 III
文章目录题目思路代码实现(Java)题目思路两次动态规划,第一次动态规划从前到后,第二次从后到前,然后在前后两次动态规划的结果和中找到最大值即可。代码实现(Java)class Solution { public int maxProfit(int[] prices) { int max = 0, len = prices.length; int[] before = new int[len]; int[] after = new i原创 2021-04-28 14:58:08 · 98 阅读 · 0 评论 -
LeetCode 121. 买卖股票的最佳时机
文章目录题目思路代码实现(Java)总结题目思路动态规划dp[i] 表示到第 i 天获得的最大利润,min 维护从 0 到 i-1 的最小 prices[i] 值则有dp[0] = 0; 初始化条件dp[i] = max(dp[i-1],prices[i] - min); prices[i] > min 的情况dp[i] = dp[i-1]; prices[i] <= min 的情况下最后直接返回 dp[prices.length-1] 即可代码实现(Java)cla原创 2021-04-27 12:23:38 · 97 阅读 · 0 评论 -
LeetCode 81. 搜索旋转排序数组 II
文章目录题目思路代码实现(Java)题目思路考虑到是非降序,可以很容易想到利用二分,但是这题中的数组是由两段非降序数组组成的,所以我们可以先对第一段非降序数组进行顺序遍历比较,直到 当前的数比下一个数大的情况,这时候说明过渡到第二段非降序数组中了,所以直接对第二段非降序数组进行二分搜索。代码实现(Java)class Solution { public boolean search(int[] nums, int target) { int len = nums原创 2021-04-07 22:43:54 · 214 阅读 · 0 评论 -
LeetCode 1143. 最长公共子序列
文章目录题目思路代码实现(Java语言)总结题目思路动态规划dp[i][j]表示text1 到 i,text2 到 j 为止公共子序列的最长长度考虑动态规划的边界情况:当 i=0i=0 时,dp[0][j] = dp[i][0] = 0当 text1[i] = text[j] 时 : dp[i][j] = dp[i-1][j-1]+1否则 dp[i][j] = max(dp[i][j-1],dp[i-1][j])代码实现(Java语言)class Solution {原创 2021-04-03 13:26:20 · 369 阅读 · 0 评论 -
LeetCode82. 删除排序链表中的重复元素 II
文章目录题目思路代码实现(Java)题目思路因为链表是有序的,所以重复节点一定是相邻节点。建立一个头节点,来连接需要保存到答案链表里的节点。当要链接一个节点的时候,如果该节点后面有和这个节点值重复,则用循环跳过节点值重复的区间。否则就直接链接该节点。比如: 1 -> 2 -> 2 -> 2 -> 3,我们用一个 pre 指向 1;当 next 指向第一个 2 的时候,发现 next .val == next .next.val ,所以出现了值重复的节点,所以 ne原创 2021-03-25 16:31:44 · 157 阅读 · 0 评论 -
【回溯剪枝】求一个数组中所有和为target的组合
目录前言题目思路代码测试结果总结前言今天这道题,沉痛的教训,思路是对的,但是漏写循环条件了。明明手写可以写出来的,但…题目求一个数组里所有和为 target 的组合比如数组为 [2,2,3,4] , target = 7则所有的组合为[2,2,3] , [3,4]思路回溯剪枝,遍历所有情况,dfs模板题sum 保存临时和,tmp保存临时的组合, index 递归到当前的深度如果 sum == target,则当前的 tmp 是一个合法的组合,添加到答案集合里。如果 su原创 2021-03-12 21:49:42 · 1666 阅读 · 4 评论 -
LeetCode 面试题 17.10. 主要元素
LeetCode 面试题 17.10. 主要元素题目思路代码实现(Java语言)题目思路摩尔投票法任意消除数组中两个不相等的数,则最后剩下来的数一定是众数。通俗的理解: 如果许多国家的士兵打仗,士兵实力相同,一定会一换一,则士兵多的国家会赢。(人多则赢)这题的解题思路:首先用摩尔投票法选出数组中的众数,再遍历一遍数组统计这个众数的出现次数,如果出现次数大于 (数组的长度/2),则返回这个众数,否则返回-1。代码实现(Java语言)class Solution { public原创 2021-02-26 18:44:15 · 139 阅读 · 2 评论 -
LeetCode 1423. 可获得的最大点数
LeetCode 1423. 可获得的最大点数一、题目二、思路三、代码实现(Java)一、题目二、思路滑动窗口思路先保存数组前 k 个值的和作为窗口初始值, 然后窗口每次向右滑动一格, 滑动窗口的值 减去旧的最左边的值,加上新加入窗口的值, 在这过程中保存最大值注意遍历数组条件不是移到数组最末端,而是移动到第k个就得停下来,因为题目说只能从最左边和最右边取三、代码实现(Java)class Solution { public int maxScore(int[] cardPo原创 2021-02-06 15:20:47 · 173 阅读 · 1 评论 -
LeetCode 1208. 尽可能使字符串相等
LeetCode 1208. 尽可能使字符串相等一、题目二、思路三、代码实现(Java)一、题目二、思路按照题目的意思,我们可以自己先模拟一下两个字符串对应的ASCII码差数组如下图costs[i] = abs( s[i] - t[i] )这样子一来,就可以把问题转换为找出costs数组中前缀和不超过maxCount的最长区间长度,而求区间长度问题,可以利用滑动窗口思想。滑动窗口中用到了左右两个指针,它们移动的思路是:以右指针作为驱动,拖着左指针向前走。右指针每次只移动一步,而左指针在内部原创 2021-02-05 15:15:35 · 243 阅读 · 2 评论 -
LeetCode面试题 17.12 BiNode
LeetCode面试题 17.12 BiNode一、题目二、思路三、代码实现(Java)一、题目二、思路二叉搜索树特点: 左节点的值不大于父节点的值,右节点的值不小于父节点的值, 因此对二叉搜索树进行中序遍历,可以得到递增的序列。根据这个思路,可以想到在中序遍历的过程种把每一个子节点的右指针指向父节点,然后把父节点的左指针置空,正如下图所示。三、代码实现(Java)/** * Definition for a binary tree node. * public class Tree原创 2021-02-03 00:16:12 · 1398 阅读 · 3 评论 -
LeetCode 17. 电话号码的字母组合
电话号码的字母组合一、题目二、思路三、实现代码(Java)一、题目二、思路先根据题目要求构造出一个数字和字符串的映射map, 对目标字符串进行DFS深搜和回溯,递归出口为深搜的长度Index等于目标字符串digits的长度。如果可以深搜,从 map 中取出当前目标字符串下标的字符(digits[index])所映射的字符串,再在该字符串中进行同样的深搜和回溯。三、实现代码(Java)class Solution { public List<String> lette原创 2021-01-25 15:15:35 · 722 阅读 · 4 评论 -
LeetCode 547. 省份数量
省份数量题目思路实现代码(Java)题目思路利用并查集实现,这题就是求无向图的连通分量个数,独立的顶点也算是一个连通分量实现代码(Java)class Solution { int[] f; public int findCircleNum(int[][] isConnected) { int n = isConnected[0].length; f = new int[n+1]; init(f,n); for(i原创 2021-01-07 10:47:11 · 7216 阅读 · 2 评论 -
LeetCode 14. 最长公共前缀
LeetCode 14 最长公共前缀题目思路实现代码(Java)题目思路简单模拟, 对数组中的每一个字符串的每一个字符遍历一遍,寻找最长公共前缀,如果不满足公共前缀,则马上返回结果字符串实现代码(Java)class Solution { public String longestCommonPrefix(String[] strs) { String s = ""; int len = strs.length; for(int i = 0原创 2021-01-06 16:29:12 · 4024 阅读 · 3 评论 -
Leetcode 738. 单调递增的数字
题目解题思路思路:贪心思路,从前往后找到不符合条件的位置,然后把这个位置的数-1,然后这个位置后面的数全部改为9循环反复即可,代码有点长,注释很齐全。加油,再多努力!代码class Solution { public int monotoneIncreasingDigits(int N) { int res = N; while(res!=0) { if(isLeagal(res)) //先判断这个数是否已经符合题目要求原创 2020-12-15 20:22:05 · 8077 阅读 · 2 评论 -
LeetCode 不同路径 III
1.题目思路(Java语言描述)经典的DFS+回溯算法,这题多的限制条件就是需要计算二维数组中 0 的个数,加上这个条件判断即可class Solution { //0 1 //2 0 int rowLen; int colLen; int totalCnt = 0; public int uniquePathsIII(int[][] grid) { rowLen = grid.length; colLen =原创 2020-09-29 17:07:47 · 11185 阅读 · 0 评论 -
LeetCode 朋友圈
1.题目思路(Java语言描述)其实就是 求无向图的连通块个数, DFS 即可class Solution { int cnt = 0; int rowLen; int colLen; public int findCircleNum(int[][] M) { rowLen = M.length; colLen = M[0].length; int[] visited = new int[rowLen];原创 2020-09-28 10:45:25 · 34306 阅读 · 4 评论 -
剑指Offer 12.矩阵中的路径
题目思路(Java语言描述)经典DFS模板,逆时针遍历即可class Solution { int rowLen; int colLen; public boolean exist(char[][] board, String word) { rowLen = board.length; colLen = board[0].length; for(int i = 0;i<rowLen;i++){原创 2020-09-25 19:52:45 · 3093 阅读 · 0 评论 -
LeetCode 二叉搜索树中的众数
1.题目2.思路(Java语言描述)中序遍历过程中记录Max,将所有节点用Map做一个映射,最后遍历Map,选出符合条件的key即可/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solu原创 2020-09-24 12:27:32 · 12745 阅读 · 0 评论 -
LeetCode 左叶子之和
1.题目2.思路(Java语言描述)判断当前节点是否是左节点,若是则加上该节点的值,再递归左右子树/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public原创 2020-09-23 20:37:51 · 8253 阅读 · 0 评论 -
LeetCode 合并二叉树
1.题目2.思路(Java语言描述)以t1节点为根节点,原地修改指针递归返回出口条件其中一个节点非空,则返回该非空节点在t1的原树上进行指针的修改即可两者都为空,直接返回t1/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val原创 2020-09-23 19:52:07 · 3139 阅读 · 0 评论 -
LeetCode 二叉搜索树的范围和
1.题目2.初解题思路(JAVA语言)其实就是二叉树的先序遍历+限制条件/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int rangeSum原创 2020-09-22 13:42:44 · 8675 阅读 · 1 评论 -
LeetCode 删除链表中的节点
1.题目2.思路这题和普通的单链表删除不同,普通的单链表删除是找到删除节点的前一个和后一个,修改指针即可,这题只给一个删除节点,所以思路可以转变成,把所有节点的值向前移一个,然后删除最后一个节点即可3.Java语言题解/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; }原创 2020-09-21 21:30:52 · 4918 阅读 · 0 评论 -
LeetCode 对称二叉树
1.题目2.初解题思路(代码语言:Java)利用左堆栈和右堆栈保存左子树先序遍历的所有结果和右子树反先序遍历的结果,然后同时出栈判断,若两个堆栈同时为空则为对称/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * }原创 2020-09-21 15:01:42 · 5778 阅读 · 1 评论 -
LeetCode 环形链表
1.题目思路利用快慢指针,快指针每次走两次,慢指针每次走一次,其实只要两个指针的步数不一致即可public class Solution { public boolean hasCycle(ListNode head) { if(head == null || head.next == null){ return false; } ListNode front = head; ListNode foo原创 2020-09-20 22:02:34 · 7734 阅读 · 0 评论 -
LeetCode 单词搜索
题目:思路:一般遇到路径搜索问题,基本上都是 DFS 深度优先遍历和回溯 方向这题可以建立一个递归的模型递归出口是 递归的深度 等于 单词 的长度递归二维数组的时候需要判断边界条件和是否已经遍历过该位置,或者是该位置的字符不等于word对应遍历深度的字符以顺时针的方向去遍历相邻的位置只要存在一种方向遍历返回了true,就说明存在一条路径,那么就可以直接返回true要注意标记遍历过的位置Java语言题解:class Solution { boolean[][] flag;原创 2020-09-19 10:01:29 · 2685 阅读 · 0 评论 -
Leetcode 删除排序数组中的重复项
题目给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。测试用例示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组原创 2020-06-29 19:54:53 · 1244 阅读 · 0 评论 -
解决LeetCode平台 本地运行结果和提交测试结果不一致的问题
不要使用 static 变量,方法不要设置成 static原创 2020-04-26 12:13:38 · 9265 阅读 · 11 评论 -
LeetCode N皇后II
题目描述n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给定一个整数 n,返回 n 皇后不同的解决方案的数量。示例:输入: 4输出: 2解释: 4 皇后问题存在如下两个不同的解法。[[".Q…", // 解法 1“…Q”,“Q…”,“…Q.”],["…Q.", // 解法 2“Q…”,“…Q”,“.Q…”]]提示...原创 2020-04-26 12:07:28 · 517 阅读 · 0 评论 -
LeetCode 开心字符串
题目描述一个 「开心字符串」定义为:仅包含小写字母 [‘a’, ‘b’, ‘c’].对所有在 1 到 s.length - 1 之间的 i ,满足 s[i] != s[i + 1] (字符串的下标从 1 开始)。比方说,字符串 “abc”,“ac”,“b” 和 “abcbabcbcb” 都是开心字符串,但是 “aa”,“baa” 和 “ababbc” 都不是开心字符串。给你两个整数 n 和...原创 2020-04-21 11:56:30 · 1719 阅读 · 0 评论