双指针
文章平均质量分 50
promise_yaner
这个作者很懒,什么都没留下…
展开
-
【Leetcode】6031. 找出数组中的所有 K 近邻下标
题目链接:K紧邻下标题目描述:给你一个下标从 0 开始的整数数组 nums 和两个整数 key 和 k 。K 近邻下标 是 nums 中的一个下标 i ,并满足至少存在一个下标 j 使得 |i - j| <= k 且 nums[j] == key 。以列表形式返回按 递增顺序 排序的所有 K 近邻下标。题目分析:用双指针的方法,当nums[j]==key的时候,将其前后k个长度范围的下标i加入结果数组,可以使用双指针进行优化,减少重复判断。代码如下:// 双指针 var原创 2022-03-13 15:25:55 · 726 阅读 · 0 评论 -
【Leetcode】剑指 Offer II 016. 不含重复字符的最长子字符串
题目链接:不含重复字符的最长子字符串题目描述:给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。方法:使用滑动窗口(双指针)。窗口中永远是不含重复字符的连续子字符串,求出其最大长度。// 滑动窗口var lengthOfLongestSubstring = function(s) { const length=s.length; if(length<=1) return length; let left=0,ri.原创 2022-03-06 21:16:38 · 246 阅读 · 0 评论 -
【Leetcode】最短无序连续子数组
题目链接:最短无序连续子数组题目描述:给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。分析:由题意可以得知,nums由三部分组成,[numsA,numsB,numsC],其中numsA和numsC是升序排列,numsB即为所求的需要进行升序排序的最短的子数组。找出numsB的上下界即可。方法一:排序将nums整体进行升序排序,将排序后的数组和原数组进行一一对比原创 2022-03-02 16:11:43 · 358 阅读 · 0 评论 -
【Leetcode】287. 寻找重复数
题目链接:287. Find the Duplicate Number题目描述:给定一个包含n + 1 个整数的数组nums ,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。分析:寻找重复数的常用思路:1)排序+遍历排序可以使用归并排序、堆排序、快速排序等时间复杂度为O(n logn)的算法,然后再遍历找...原创 2021-12-15 20:34:59 · 678 阅读 · 0 评论 -
【Leetcode】链表排序
题目链接:147.链表插入排序 148.链表排序147链表直接插入排序:思路:从第二个节点开始,每个当前节点curr都和其前面一个节点即当前有序序列的最后一个节点lastSorted进行比较,若curr.val小于lastSorted.val,则进行遍历将curr插入lastSorted之前;否则,继续往后遍历。事件复杂度是O(n^2),空间复杂度是O(1)。代码如下:// 直接插入排序O(n^2) public static ListNode sortList(L...原创 2021-12-09 20:12:25 · 434 阅读 · 0 评论 -
【LeetCode】Linked List Cycle
题目连接:环形链表II题目描述:返回链表开始入环的第一个节点,如果无环,则返回null。方法一、哈希表HashSet存储链表节点,遍历链表,当一个节点在哈希表中已存在时,说明链表有环,且该节点就是入环的第一个节点。该方法用于判断链表是否有环,和链表入环第一个节点,思路一模一样。时间复杂度O(n),空间复杂度O(n)。代码如下:public static ListNode detectCycle(ListNode head) { Set<ListNode> set=原创 2021-11-14 16:35:35 · 416 阅读 · 0 评论