合集-leetcode hot100

摘要:解题思路:如果两个链表在某一点相交,那么那一点之后的node也都会相同,长度也相同。所以,我们先遍历获取对应每一条链表的长度,然后让长的链表先走两个链表长度之差的距离,然后再同时起步,每个节点进行对比,能不能找到相同的。 /** * Definition for singly-linked list 阅读全文
posted @ 2025-02-15 17:49 kukudev 阅读(1) 评论(0) 推荐(0) 编辑
摘要:解题思路:找祖先从底向上递归后序遍历查找,遇到p,q或者空节点就直接返回对应值,当某个节点的左子树、右子树都返回了值,那么就说明该节点就是最近祖先节点,然后把该节点的值继续往上传,直到根节点返回结果。 /** * Definition for a binary tree node. * public 阅读全文
posted @ 2025-02-15 20:43 kukudev 阅读(1) 评论(0) 推荐(0) 编辑
摘要:解题思路:暴力解法直接遍历一遍,但是最后两个点超时;解决方法用单调栈的方式进行解决,栈存储的是下标,当某一天的温度值比栈顶的温度高的时候,就把栈顶元素弹出,并且在对应answer填入两者下标差值,然后继续对比,直到空栈或者栈顶元素比该天温度高,将该下标存入栈中,然后继续遍历。 暴力解法: class 阅读全文
posted @ 2025-02-16 09:58 kukudev 阅读(1) 评论(0) 推荐(0) 编辑
摘要:解题思路:找个容器将这个链表遍历一遍存下来,然后再对比;或者用数组列表存下来,双指针前后对比 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNo 阅读全文
posted @ 2025-02-15 21:05 kukudev 阅读(0) 评论(0) 推荐(0) 编辑
摘要:解题思路:前序遍历,然后将每个非空节点的左右子树交换(java要创建tmp变量交换),最后返回交换后的root;或者也可以创建一个新的二叉树节点然后赋值(比较麻烦) class Solution { public TreeNode invertTree(TreeNode root) { if (ro 阅读全文
posted @ 2025-02-17 19:15 kukudev 阅读(1) 评论(0) 推荐(0) 编辑
摘要:解题思路:需要使用hashmap,定义是(<String,List()>)遍历数组内每一个字符串,转为字符数组后用Arrays.sort()排序,如果hashmap.containsKey没有对应的key,就将排序后的字符数组转回字符串(new String(arr)),以(s_new,new Li 阅读全文
posted @ 2025-02-19 19:58 kukudev 阅读(3) 评论(0) 推荐(0) 编辑
摘要:解题思路:因为可能存在相同的数,所以运用到HashSet去重,然后遍历hashset每个数num,如果num-1不在hashset中,那么num就是序列开头,然后继续查找num++,直到hashset中找不到为止,记录长度,最后取最长的长度。 class Solution { public int 阅读全文
posted @ 2025-02-20 19:55 kukudev 阅读(2) 评论(0) 推荐(0) 编辑
摘要:解题思路:双指针问题,一个思路就是一个指针负责保留要的数组元素,另一个负责一直往前筛选,碰到0就跳过,剩下的就保存在第一个指针中,最后再把剩下的部分用0补齐。 class Solution { public void moveZeroes(int[] nums) { int left = 0; in 阅读全文
posted @ 2025-02-21 19:07 kukudev 阅读(1) 评论(0) 推荐(0) 编辑
摘要:解题思路:双指针另一种思路就是两个指针从数组两边往中间走,碰到符合条件的记录下来。两个指针一开始在最两边,底边一定是最长的,记录此时的面积,然后选取两者中较短的往对方靠拢,因为底边缩短,如果面积要出现更大的,一定是较短的变长了,依靠这个思路继续遍历直到left==right,最后返回记录的最大的面积 阅读全文
posted @ 2025-02-21 19:26 kukudev 阅读(1) 评论(0) 推荐(0) 编辑
摘要:解题思路:滑动窗口问题,关键在于记录之前出现过的字符,当遍历过程中碰到之前出现的,就从之前出现的下一个作为start,实时比较当前值和最长值并赋值,最后返回最长值。java可以采用hashmap记录出现过的字符,value保存它的位置+1的值,作为出现重复的字符的时候的start的参考,取max(s 阅读全文
posted @ 2025-02-24 20:00 kukudev 阅读(3) 评论(0) 推荐(0) 编辑
摘要:解题思路:还是滑动窗口题,主要是如何记录p内所有字符的情况,一种方法就是用2个长26的数组,用'str'-a对数组加值,先把p的那个数组确定,然后用end遍历S,每进一个对应的数组的值就加1,如果长度超过p就把start的对应的值减1,然后start++,如果最后长度等于p,那就比较两个数组,相同的 阅读全文
posted @ 2025-02-25 19:57 kukudev 阅读(1) 评论(0) 推荐(0) 编辑
摘要:解题思路:本题思路主要是前缀和思想,涉及到子集和问题,前缀和思想有效,两个前缀和的差就等于对应一个子集和。本题可以用哈希表的方式记录每个前缀和的值,核心依靠k = pre[j]-pre[i]转化成pre[j]-k=pre[i],计算pre[i]这个值出现的个数加到res中,最后返回。 class S 阅读全文
posted @ 2025-02-26 19:55 kukudev 阅读(2) 评论(0) 推荐(0) 编辑
摘要:解题思路:这题思路有很多,动态规划,前缀和等,前缀和就是遍历一遍,将每个前缀和与前面最小的前缀和相减,就能得到最大值,然后比较与记录最大值。(还有一种思路就是首先明确最大子串内部一定不会存在某个边缘子串小于0,所以可以遍历一遍先记录继续记录前缀和,然后比较max,当某一个元素进入后前缀和小于0,说明 阅读全文
posted @ 2025-02-28 20:30 kukudev 阅读(2) 评论(0) 推荐(0) 编辑
摘要:解题思路:思路还是比较清晰,先按照起始位置排序,然后再逐个遍历,根据起始位置与前一个结束位置进行比较,两种情况进行处理即可(这边代码比较麻烦因为前面list泛型用错了) import java.util.Arrays; class Solution { public int[][] merge(in 阅读全文
posted @ 2025-03-01 16:57 kukudev 阅读(5) 评论(0) 推荐(0) 编辑
摘要:解题思路:熟能生巧,链表问题就是用指针来模拟,链表反转很经典,利用三个指针,两个指着head,一个指着null,然后模拟。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode 阅读全文
posted @ 2025-03-03 19:02 kukudev 阅读(2) 评论(0) 推荐(0) 编辑
摘要:解题思路:最简单的方法就是浪费空间的方法。还有一种巧法,先将整个数组反转,然后将需要移动的后面的k(如果超过数组长度就取余)个位置的数反转,最后将剩下的数反转。 class Solution { public void rotate(int[] nums, int k) { k = k%nums.l 阅读全文
posted @ 2025-03-03 19:05 kukudev 阅读(1) 评论(0) 推荐(0) 编辑
摘要:解题思路:不允许用除法,所以可以考虑前缀和的思路。最终结果的任意一个索引对应的数都是nums数组对应索引左边所有数的乘积*右边所有数的乘积,所以先遍历两遍用两个数组记录,然后最后再相乘写入对应的索引的值。(可以更省空间的话就只在结果数组上操作,左边照常,右边的话用一个变量来表示乘积) class S 阅读全文
posted @ 2025-03-03 19:09 kukudev 阅读(2) 评论(0) 推荐(0) 编辑
摘要:解题思路:这题思路就是用某个数据结构记录需要被置0的行和列,一般需要两次遍历。我采用集合的形式,最省空间的方法就是用数组的第一行和第一列来记录,但是要遍历一遍是是否第一行或第一列有0。 class Solution { public void setZeroes(int[][] matrix) { 阅读全文
posted @ 2025-03-03 19:36 kukudev 阅读(2) 评论(0) 推荐(0) 编辑
摘要:解题思路:这题思路主要是用某个容器(数组等)来存储链表,然后再用双指针或者同时遍历的方法就可以判断。我使用栈进行存储,出栈的元素相当于链表倒序,如果和链表正序的结果相同就证明是回文。如果想用O(1)的空间,就把前一半或后一半的链表倒转,然后遍历就可以了。 /** * Definition for s 阅读全文
posted @ 2025-03-04 21:05 kukudev 阅读(0) 评论(0) 推荐(0) 编辑
摘要:解题思路:快慢指针,一个一步一步走,一个两步两步走,如果有环,则一定会相遇;如果没环,那么快的指针一定会找到null。 /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * 阅读全文
posted @ 2025-03-05 20:11 kukudev 阅读(1) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示