![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode刷题笔记
鹤 鸣
这个作者很懒,什么都没留下…
展开
-
删除链表的倒数第N个结点(双指针法)
题目链接:19. 删除链表的倒数第 N 个结点 思路:本题为双指针的经典应用,如果要删除倒数第n个结点,则先让fast移动n步,然后同时移动fast和slow,直至fast指向链表的最后一个结点,此时slow->next指向的结点即为要删除的结点。 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0)原创 2022-01-12 13:53:53 · 172 阅读 · 0 评论 -
长度最小的子数组(滑动窗口)
题目链接:209.长度最小的子数组 思路:滑动窗口的关键就是如何确定窗口的左右边界以及移动边界的条件。 窗口内的元素:数值总和大于等于target的长度最小的子数组。 移动窗口的起始位置:如果当前窗口的值大于等于s,窗口向后移动。 移动窗口的结束位置:for循环遍历的指针。 class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { //滑动窗口 in原创 2022-01-09 20:20:40 · 196 阅读 · 0 评论 -
搜索旋转排序数组
题目: 33. 搜索旋转排序数组 解题思路: 数组经过旋转后,从中间分开,一定有一部分是有序的,如示例中从6分开后数组变成[4, 5, 6]和[7, 0, 1, 2, 3],此时左半部分是有序的。这启示我们可以在常规二分查找的时候查看当前 mid 为分割位置分割出来的两个部分 [l, mid] 和 [mid + 1, r] 哪个部分是有序的,并根据有序的那个部分确定我们该如何改变二分查找的上下界,因为我们能够根据有序的那部分判断出 target 在不在这个部分: 如果 [l, mid - 1] 是有序数组转载 2021-12-13 23:39:02 · 89 阅读 · 0 评论 -
二分写法的边界问题
二分法的边界问题讨论 题目链接: 704. 二分查找 二分法虽然逻辑比较简单,但涉及到边界条件,容易写错。 处理思路:确定要二分的区间是[left, right]还是[left, right),然后在while循环中根据确定的区间来改变循环条件。 ##二分写法(一) 定义区间target在区间[left, right]内,有如下两点: 因为left与right相等的情况在[left, right]区间是有意义的,所以循环条件应该是while(left <= right) 如果nums[mid]大于t原创 2021-12-12 22:37:13 · 291 阅读 · 0 评论