算法----双指针
sunlanchang
北京邮电大学-计算机硕士,sunlanchang@bupt.edu.cn
展开
-
LeetCode 88. 合并两个有序数组
Description给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]来源原创 2020-09-14 11:29:06 · 173 阅读 · 0 评论 -
LeetCode 334. 递增的三元子序列
Description给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例 1:输入: [1,2,3,4,5]输出: true示例 2:输入: [5,4,3,2,1]输出原创 2020-09-07 17:31:11 · 217 阅读 · 0 评论 -
LeetCode 392. 判断子序列 (双指针或者动态规划)
Description给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:s = "abc", t = "ahbgdc"返回 true.示例 2:s = "axc原创 2020-07-27 22:12:47 · 170 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组(哈希或者双指针)
Description给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 ind原创 2020-07-20 13:29:16 · 249 阅读 · 0 评论 -
LeetCode 75. 颜色分类(三指针)
Description给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sort-colors著作权归领扣网络所有。商业原创 2020-07-03 21:38:27 · 186 阅读 · 0 评论 -
LeetCode 16. 最接近的三数之和(排序+双指针)
Description给定一个包括 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] <= 1原创 2020-06-24 23:29:46 · 206 阅读 · 0 评论 -
LeetCode 202. 快乐数(快慢指针判断环)
Description编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 ...原创 2020-04-30 20:02:03 · 303 阅读 · 0 评论 -
LeetCode 881. 救生艇
Description第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回载到每一个人所需的最小船数。(保证每个人都能被船载)。示例 1:输入:people = [1,2], limit = 3输出:1解释:1 艘船载 (1, 2)示例 2:输入:people = [3,2,...原创 2020-04-12 21:03:52 · 274 阅读 · 0 评论 -
LeetCode 88. 合并两个有序数组(双指针后插)
Description给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m ...原创 2020-03-16 21:24:36 · 196 阅读 · 0 评论 -
Leetcode 283. 移动零(双指针、冒泡)
Description给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes...原创 2020-03-05 21:06:25 · 307 阅读 · 0 评论 -
面试金典 10.01. 合并排序的数组(双指针后插法)
Description给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化 A 和 B 的元素数量分别为 m 和 n。示例:输入:A = [1,2,3,0,0,0], m = 3B = [2,5,6], n = 3输出: [1,2,2,3,5,6]来源:力扣(LeetCode)链接:htt...原创 2020-03-03 22:06:49 · 201 阅读 · 0 评论 -
LeetCode 142. 环形链表 II
Description给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-l...原创 2019-11-05 16:02:33 · 195 阅读 · 0 评论 -
LeetCode 141. 环形链表
Description给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-list-cycle著作权归领扣网络所有。商业转载请联系官方授权,非商业转...原创 2019-11-05 15:38:14 · 187 阅读 · 0 评论 -
LeetCode 160. 相交链表
Description编写一个程序,找到两个单链表相交的起始节点。Solution 1暴力法,遍历A链表的每一个节点在B链表中依次判断是否是公共节点。Solution 2hashmap,遍历A链表将每个节点保存在hashmap中,再遍历B链表每个节点判断是否在hashmap中出现过。Solution 3快慢指针class Solution(object): def getI...原创 2019-11-04 17:28:01 · 225 阅读 · 0 评论 -
剑指offer 和为S的两个数字 (双指针)
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。Solution1时间复杂度O(n),空间复杂度O(n)。class Solution: def FindNumbersWithSum(self, array, tsum): ...原创 2019-09-19 20:54:57 · 154 阅读 · 0 评论 -
和为S的连续正数序列(双指针)
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列。序...原创 2019-09-19 21:36:23 · 170 阅读 · 0 评论