双指针/快慢指针
文章平均质量分 66
双指针
Sophia_fez
干啥啥不行,可爱第一名.jpg
展开
-
leetcode *457. 环形数组是否存在循环(待研究)
【题目】*457. 环形数组是否存在循环 存在一个不含 0 的 环形 数组 nums ,每个 nums[i] 都表示位于下标 i 的角色应该向前或向后移动的下标个数: 如果 nums[i] 是正数,向前 移动 nums[i] 步 如果 nums[i] 是负数,向后 移动 nums[i] 步 因为数组是 环形 的,所以可以假设从最后一个元素向前移动一步会到达第一个元素,而第一个元素向后移动一步会到达最后一个元素。 数组中的 循环 由长度为 k 的下标序列 seq : 遵循上述移动规则将导致重复下标序列 seq原创 2021-08-08 10:10:07 · 110 阅读 · 0 评论 -
leetcode *31. 下一个排列(2020.11.10)
【题目】*31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。 1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1 【解题思路1】两遍扫描 需要将一个左边的「较小数」与一个右边的「较大数」交换,以能够让当前排列变大,从而得到下一个排列。 同时要让这原创 2020-11-10 10:58:04 · 223 阅读 · 8 评论 -
leetcode *5. 最长回文子串(待深究Manacher算法)(2020.5.21)
【题目】5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 【解题思路1】暴力法 class Solution { public String longestPalindrome(String s) { char[] chs = s.toCharArray();原创 2020-05-21 14:27:38 · 212 阅读 · 1 评论 -
leetcode *143. 重排链表(2020.10.20)
【题目】*143. 重排链表 给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 给定链表 1->2->3->4, 重新排列为 1->4->2->3. 示例 2: 给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3. 【解题思路1】双端队列 cl原创 2020-10-20 10:40:03 · 156 阅读 · 0 评论 -
leetcode 844. 比较含退格的字符串(2020.10.19)
【题目】844. 比较含退格的字符串 给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 示例 1: 输入:S = "ab#c", T = "ad#c" 输出:true 解释:S 和 T 都会变成 “ac”。 示例 2: 输入:S = "ab##", T = "c#d#" 输出:t...原创 2020-05-04 21:36:14 · 161 阅读 · 0 评论 -
leetcode *19. 删除链表的倒数第N个节点(2020.10.18)
【题目】*19. 删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 【解题思路1】快慢指针 class Solution { public ListNode removeNthFromEnd(ListNode原创 2020-10-18 12:30:54 · 190 阅读 · 0 评论 -
leetcode 977. 有序数组的平方(2020.10.16)
【题目】977. 有序数组的平方 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 示例 1: 输入:[-4,-1,0,3,10] 输出:[0,1,9,16,100] 示例 2: 输入:[-7,-3,2,3,11] 输出:[4,9,9,49,121] 提示: 1 <= A.length <= 10000 -10000 <= A[i] <= 10000 A 已按非递减顺序排序。 【解题思路1】Arrays.sort() class S原创 2020-05-10 15:31:16 · 118 阅读 · 0 评论 -
leetcode 141. 环形链表(2020.10.9)
【题目】 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [1,2], pos = 0 输出:...原创 2020-03-25 16:52:00 · 162 阅读 · 0 评论 -
leetcode *142. 环形链表 II(2020.10.10)
【题目】*142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node index 1 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head原创 2020-10-10 10:58:11 · 136 阅读 · 0 评论 -
leetcode *75. 颜色分类(荷兰国旗/三色旗)(2020.10.7)
【题目】 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意:不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方案是使用计数排序的两趟扫描算法。 首...原创 2020-03-31 17:29:17 · 385 阅读 · 0 评论 -
leetcode *18. 四数之和(2020.10.5)
【题目】*18. 四数之和 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2,原创 2020-10-05 11:30:32 · 173 阅读 · 0 评论 -
leetcode 350. 两个数组的交集 II(2020.7.13)
【题目】350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑...原创 2020-04-08 16:51:47 · 168 阅读 · 0 评论 -
leetcode *209. 长度最小的子数组(2020.6.28)
【题目】*209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。 示例: 输入: s = 7, nums = [2,3,1,2,4,3] 输出: 2 解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。 进阶: 如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。 【解题思路1】双指针 / 滑动窗口 start和end原创 2020-06-28 13:17:05 · 178 阅读 · 0 评论 -
leetcode *16. 最接近的三数之和(2020.6.24)
【题目】16. 最接近的三数之和 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 示例: 输入:nums = [-1,2,1,-4], target = 1 输出:2 解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。 提示: 3 <= nums.length <= 10^3 -10^3 <= nums[i] <=原创 2020-06-24 14:53:50 · 250 阅读 · 0 评论 -
leetcode 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 & 905. 按奇偶排序数组
【题目】905. 按奇偶排序数组 给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。 你可以返回满足此条件的任何数组作为答案。 示例: 输入:[3,1,2,4] 输出:[2,4,3,1] 输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。 提示: 1 <= A.length <= 5000 0 <= A...原创 2020-05-07 20:58:33 · 199 阅读 · 0 评论 -
leetcode *15. 三数之和(2020.6.12)
【题目】*15. 三数之和 两数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 【解题思路1】排序+双指针 class Solution { public sta原创 2020-06-12 11:52:32 · 148 阅读 · 0 评论 -
leetcode 剑指 Offer 52. 两个链表的第一个公共节点 & 160. 相交链表 & 面试题 02.07. 链表相交(双指针)
【题目】 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 ...原创 2020-03-25 17:16:41 · 223 阅读 · 0 评论 -
leetcode 1089. 复写零(快慢指针)
【题目】1089. 复写零 给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。 要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。 示例 1: 输入:[1,0,2,3,0,4,5,0] 输出:null 解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4] 示例 2: 输入:[1,2,3] 输出:null 解释:调用函数后,输入的数组将被修改为:[1,2,3] 提示: 1 &原创 2020-05-15 17:00:45 · 272 阅读 · 0 评论 -
leetcode 345. 反转字符串中的元音字母(2021.8.19)
【题目】345. 反转字符串中的元音字母 编写一个函数,以字符串作为输入,反转该字符串中的元音字母。 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leetcode" 输出: "leotcede" 说明:元音字母不包含字母"y"。 【解题思路1】双指针 元音字母要考虑大小写的aeiou、AEIOU class Solution { public St...原创 2020-04-08 15:37:01 · 338 阅读 · 0 评论 -
leetcode 344. 反转字符串(2020.10.8)
【题目】344. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 示例 1: 输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"]...原创 2020-04-08 15:27:26 · 184 阅读 · 1 评论 -
leetcode 234. 回文链表(2020.10.23) & 面试题 02.06. 回文链表(快慢指针)
【题目】234. 回文链表 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 【解题思路1】快慢指针+翻转 使用快慢指针找到中间的位置,如果是奇数个元素,中间元素归前半部分, 对后半部分翻转,并且最后将链表恢...原创 2020-04-02 17:25:34 · 253 阅读 · 0 评论 -
leetcode 202. 快乐数(快慢指针)(2020.4.30)
【题目】202. 快乐数 编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。 示例: 输入: 19 输出: true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12...原创 2020-04-01 17:00:00 · 215 阅读 · 1 评论 -
leetcode 剑指 Offer 57. 和为s的两个数字 & 1. 两数之和(2020.10.3)
【题目】 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 【解题思路...原创 2020-02-22 22:19:19 · 181 阅读 · 0 评论 -
leetcode 剑指 Offer 57 - II. 和为s的连续正数序列(2020.3.6)
【题目】 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例 1: 输入:target = 9 输出:[[2,3,4],[4,5]] 示例 2: 输入:target = 15 输出:[[1,2,3,4,5],[4,5,6],[7,8]] 限制:1 <= target <...原创 2020-03-29 23:07:34 · 183 阅读 · 0 评论 -
leetcode 88. 合并两个有序数组 & 面试题 10.01. 合并排序的数组(2020.3.3)
【题目】 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums...原创 2020-03-12 14:56:30 · 196 阅读 · 0 评论