LeetCode
文章平均质量分 58
Trista__
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode306——累加数(回溯算法)
LeetCode306——累加数(回溯算法)首先要知道回溯算法的一般套路为://添加路径track.add(路径);//进入下一个决策树backTrack();//撤销选择track.remove(路径);它是一种暴力穷举的算法,在此基础上,进行剪支以降低回溯的次数。下面来看一道算法题。LeetCode306判断一个字符串是否为累加数,意思很明确,但是难点在于如何找到第一个数和第二个数,只要找到这两个数,一直加下去看是不是等于后面那个数就完了,只要有一次不相等,就需要重新确定第一个原创 2021-05-27 10:06:35 · 313 阅读 · 0 评论 -
一期关于数组、链表、字符串去重(双指针)
去重twoSum 3sum 4sum双指针原创 2021-05-21 10:16:57 · 281 阅读 · 0 评论 -
字符串的排列——滑动窗口
LeetCode5671. 思路一:自己想的方法采用哈希表记录s1中有的字符以及数量,双指针遍历s2,如果哈希表中有right指向的元素,把哈希表中的数量-1,并将right后移,判断right与left中间的长度是否与s1一致,若一致就可以返回true了。这里会出现两种特殊情况,一种是哈希表中没有right指向的元素,那里这里需要将left移到right+1的位置,并且把原先减去的值都加回来。第二种是right指向的元素出现的次数已经大于应有的次数,也就是哈希对应的value小于0了,这时候需要把原创 2021-05-16 12:37:57 · 216 阅读 · 0 评论 -
爱吃香蕉的珂珂,包裹运输问题——二分查找的变形
LeetCode875题目表述:题目的意思是,珂珂一小时最多能吃完一堆,如果吃完了还有时间,她也不会再吃了。因此最小速度的最大值正是数组中的最大数,最小值是1。class Solution { public int minEatingSpeed(int[] piles, int h) { //1.找到一堆中的最大值 int max = 0; for(int number : piles){ max = Math.max(原创 2021-05-16 10:36:18 · 235 阅读 · 0 评论 -
二分算法总结(遇事不决,先写模板)
先上个最基础的二分查找:LeetCode704 public int search(int[] nums, int target) { if(nums.length == 0) return -1; int left = 0; int right = nums.length -1; while(left <= right){ //搜索区间是[left,right],闭区间 int mid = left原创 2021-05-16 10:15:57 · 167 阅读 · 0 评论 -
判断链表是否有环,找环的起点(双指针)
判断链表是否有环,找环的起点(双指针)LeetCode141题目描述:一般的单链表是没有环的,也就是说链表的尾节点指向null,而环形链表一直追溯next可以遍历到相同的值,且没有节点的next指向null。判断链表是否有环可以采用双指针方法,定义一个慢指针slow和一个快指针fast,慢指针每次走一步,快指针每次走两步,那么快指针如果和慢指针相遇了就说明链表有环。public class Solution { public boolean hasCycle(ListNode head)原创 2021-05-12 14:19:14 · 873 阅读 · 1 评论 -
回文链表(双指针法)
回文链表(双指针法)LeetCode234题目描述:这道题很容易想到一种方法:将整条链表反转和原先的链表进行比较,如果每个节点都一样,说明这个链表是回文链表。但是事先需要对原链表进行复制操作。下面介绍一种快慢指针的方法,定义一个快指针和一个慢指针,快指针每次走两步,慢指针每次走一步,当快指针走到链表尾部的时候,慢指针就来到了链表的中心。注意链表长度是奇数和偶数存在不同的情况,如下图链表长度为偶数,则快指针为空时,慢指针到达中心位置:而链表长度为奇数时,快指针的下一个节点为空时,慢指针来到中心位原创 2021-05-12 10:14:04 · 300 阅读 · 0 评论 -
删除链表的倒数第 N 个结点(双指针)
删除链表的倒数第 N 个结点LeetCode19题目描述:要做的有两件事:一找到要删除的节点,二让这个节点的前面一个节点指向要删除节点的后一个节点1. 三指针法这个方法是自己想的有点繁琐。定义三个指针,一个记录要删除的节点,一个记录待删除节点的前一个节点,最后一个用于遍历。对头节点要另外做处理。class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { if(head.next ==原创 2021-05-11 21:49:28 · 272 阅读 · 0 评论 -
不含有重复字符的 最长子串 的长度(滑动窗口)
不含有重复字符的 最长子串 的长度(滑动窗口法)LeetCode3题目描述:“最长子串”,令人很容易想到滑动窗口,而“不含有重复字符”则可以借助哈希表,因此本题思路为滑动窗口+哈希表实现。定义pre和next指针,表示滑动窗口的起始位置和终止位置,用一个ans变量来维护窗口的最小长度。建立一个哈希map,如果表内不含next指向的元素,则将它加入到map中,next后移,继续检查下一个元素,如果表内含有next指向的元素,则先将头元素移出,令头指针pre后移一位,循环判断。class Solut原创 2021-05-11 11:51:46 · 320 阅读 · 0 评论 -
长度最小的子数组——滑动窗口法
长度最小的子数组——滑动窗口法LeetCode209题目描述:注意题目说的是连续的子数组,所以这道题最简单的做法应该是滑动窗口,时间复杂度O(n),空间复杂度O(1)。定义左右指针分别为left和right表示窗口的起始位置和终止位置,初始都指向0,并用sum变量记录当前滑动窗口所有元素之和,minNum表示滑动窗口的最小长度。left指针先不动,将right指针后移并更新sum的值,若sum>=target,则更新minNum的值,并且此时将sum减去left指向的值,将left后移,直到s原创 2021-05-11 11:10:17 · 317 阅读 · 0 评论 -
反转单链表:递归和迭代
反转单链表LeetCode92单链表的结构为:// 单链表节点的结构public class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}1. 迭代实现法这里用一张人家画好的图,思想是定义三个节点pre、nxt、cur,cur节点表示当前的节点,nxt记录院链表中cur的下一个节点,pre初始化为null,首先让头节点指向pre,cur和pre都向后移动一位,接着让cur一直指向pr原创 2021-05-10 21:26:15 · 276 阅读 · 0 评论
分享