指针
文章平均质量分 62
yuzhang_zy
现在的我不是最好的我,未来的我才是最好的我,每一篇博客都记录着我的成长
展开
-
2122 还原原数组(枚举,双指针)
1. 问题描述:Alice 有一个下标从 0 开始的数组 arr ,由 n 个正整数组成。她会选择一个任意的正整数 k 并按下述方式创建两个下标从 0 开始的新整数数组 lower 和 higher :对每个满足 0 <= i < n 的下标 i ,lower[i] = arr[i] - k 对每个满足 0 <= i < n 的下标 i ,higher[i] = arr[i] + k不幸地是,Alice 丢失了全部三个数组。但是,她记住了在数组 lower 和 highe原创 2022-01-04 15:47:46 · 461 阅读 · 0 评论 -
2105 给植物浇水 II(双指针)
1. 问题描述:Alice 和 Bob 打算给花园里的 n 株植物浇水。植物排成一行,从左到右进行标记,编号从 0 到 n - 1 。其中,第 i 株植物的位置是 x = i 。每一株植物都需要浇特定量的水。Alice 和 Bob 每人有一个水罐,最初是满的 。他们按下面描述的方式完成浇水:Alice 按从左到右的顺序给植物浇水,从植物 0 开始。Bob 按 从右到左 的顺序给植物浇水,从植物 n - 1 开始。他们 同时 给植物浇水。如果没有足够的水 完全 浇灌下一株植物,他 / 她会立即重新灌满原创 2021-12-14 09:22:23 · 205 阅读 · 0 评论 -
719 找出第 k 小的距离对(二分查找、双指针)
1. 问题描述:给定一个整数数组,返回所有数对之间的第 k 个最小距离。一对 (A,B) 的距离被定义为 A 和 B 之间的绝对差值。示例 1:输入:nums = [1,3,1]k = 1输出:0解释:所有数对如下:(1,3) -> 2(1,1) -> 0(3,1) -> 2因此第 1 个最小距离的数对是 (1,1),它们之间的距离为 0。提示:2 <= len(nums) <= 10000.0 <= nums[i] <.原创 2021-09-01 09:02:13 · 198 阅读 · 0 评论 -
713 乘积小于K的子数组(枚举技巧、双指针)
1. 问题描述:给定一个正整数数组nums和整数 k 。请找出该数组内乘积小于k的连续的子数组的个数。示例 1:输入: nums = [10,5,2,6], k = 100输出: 8解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于100的子数组。示例 2:输入: nums = [1,2,3], k = 0输出: 0提示:1...原创 2021-08-21 16:22:49 · 183 阅读 · 0 评论 -
696 计数二进制子串(双指针)
1. 问题描述:给定一个字符串s,计算具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是连续的。重复出现的子串要计算它们出现的次数。示例 1 :输入: "00110011"输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。请注意,一些重复出现的子串要计算它们出现的次数。另外,“00110011”不是有效的子串,因为所有的0(和1)没有组合在一起。示例 .原创 2021-08-06 21:23:32 · 135 阅读 · 0 评论 -
680 验证回文字符串 Ⅱ(双指针)
1. 问题描述:给定一个非空字符串s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: s = "aba"输出: true示例 2:输入: s = "abca"输出: true解释: 你可以删除c字符。示例 3:输入: s = "abc"输出: false提示:1 <= s.length <= 10 ^ 5s 由小写英文字母组成来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/va.原创 2021-08-04 17:17:16 · 176 阅读 · 0 评论 -
674 最长连续递增序列(双指针)
1. 问题描述:给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回该序列的长度。连续递增的子序列可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。示例 1:输入:nums = [1,3,5,4,7]输出:3解释:最长连续递增序列是 [1,3,5原创 2021-08-03 15:20:56 · 363 阅读 · 0 评论 -
643 子数组最大平均数 I(滑动窗口)
1. 问题描述:给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。示例:输入:[1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75提示:1 <= k <= n <= 30,000。所给数据范围 [-10,000,10,000]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-a原创 2021-07-31 10:58:29 · 144 阅读 · 0 评论 -
611 有效三角形的个数(枚举技巧、双指针、二分查找)
1. 问题描述:给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。示例 1:输入: [2,2,3,4]输出: 3解释:有效的组合是:2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,3注意:数组长度不超过1000。数组里整数的范围为 [0, 1000]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-triangle-number2. 思路分析:分.原创 2021-07-27 18:36:46 · 378 阅读 · 0 评论 -
605 种花问题(双指针)
1. 问题描述:假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数n ,能否在不打破种植规则的情况下种入n朵花?能则返回 true ,不能则返回 false。示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:true示例 2:输入:flowerbed =...原创 2021-07-27 15:17:41 · 105 阅读 · 0 评论 -
567 字符串的排列(双指针、哈希表)
1. 问题描述:给定两个字符串s1和s2,写一个函数来判断 s2 是否包含 s1的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串 。示例 1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba").示例 2:输入: s1= "ab" s2 = "eidboaoo"输出: False提示:1 <= s1.length,s2.length <= 10 ^ 4s1 和 s2 仅...原创 2021-07-24 16:25:33 · 190 阅读 · 0 评论 -
532 数组中的 k-diff 数对(枚举、双指针)
1. 问题描述:给定一个整数数组和一个整数k,你需要在数组里找到不同的k-diff 数对,并返回不同的 k-diff 数对的数目。这里将k-diff数对定义为一个整数对 (nums[i], nums[j]),并满足下述全部条件:0 <= i < j < nums.length|nums[i] - nums[j]| == k注意,|val| 表示 val 的绝对值。示例 1:输入:nums = [3, 1, 4, 1, 5], k = 2输出:2解释:数组中有...原创 2021-07-21 12:09:06 · 148 阅读 · 0 评论 -
如何快速判断一个序列是否是另外一个序列的子序列(双指针)
1. 问题描述:给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm。请你判断 a 序列是否为 b 序列的子序列。子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5} 是序列 {a1,a2,a3,a4,a5} 的一个子序列。输入格式第一行包含两个整数 n,m。第二行包含 n 个整数,表示 a1,a2,…,an。第三行包含 m 个整数,表示 b1,b2,…,bm。输出格式如果 a 序列是 b 序列的子序列,输原创 2021-07-19 10:50:10 · 1036 阅读 · 0 评论 -
485 最大连续 1 的个数(双指针)
1. 问题描述:给定一个二进制数组, 计算其中最大连续 1 的个数。示例:输入:[1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.提示:输入的数组只包含0 和 1 。输入数组的长度是正整数,且不超过 10,000。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/max-consecutive-ones2. 思路分析:分析题目可以知道这是一道经典的双指针算法题目.原创 2021-07-10 17:08:00 · 197 阅读 · 0 评论 -
475 供暖器(二分查找、双指针)
1. 问题描述:冬季已经来临。你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。在加热器的加热半径范围内的每个房屋都可以获得供暖。现在,给出位于一条水平线上的房屋houses 和供暖器heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。说明:所有供暖器都遵循你的半径标准,加热的半径也一样。示例 1:输入: houses = [1,2,3], heaters = [2]输出: 1解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖...原创 2021-07-09 15:23:22 · 229 阅读 · 0 评论 -
455 分发饼干(贪心、双指针)
1. 问题描述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j]>= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩...原创 2021-07-04 17:05:51 · 244 阅读 · 2 评论 -
443 压缩字符串(双指针)
1. 问题描述:给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。进阶:你能否仅使用O(1) 空间解决问题?示例 1:输入:["a","a","b","b","c","c","c"]输出:返回 6 ,输入数组的前 6 个字符应该是:["a","2","b","2","c","3"]说明:"aa" 被 "a2" 替代。"bb" 被 "b2" 替代。"c原创 2021-07-01 10:59:59 · 172 阅读 · 0 评论 -
438 找到字符串中所有字母异位词(哈希表、双指针)
1. 问题描述:给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例1:输入:s: "cbaebabacd" p: "abc"输出:[0, 6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的字母异位词。起始索引等于 6 的子串是 "bac", 它.原创 2021-06-30 17:04:41 · 127 阅读 · 0 评论 -
434 字符串中的单词数(双指针)
1. 问题描述:统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。请注意,你可以假定字符串里不包括任何不可打印的字符。示例:输入: "Hello, my name is John"输出: 5解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-segments-in-a-string2. 思路分析:这是一道简单的双原创 2021-06-29 18:02:07 · 118 阅读 · 0 评论 -
424 替换后的最长重复字符(双指针)
1. 问题描述:给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度和 k 不会超过 10 ^ 4。示例 1:输入:s = "ABAB", k = 2输出:4解释:用两个'A'替换为两个'B',反之亦然。示例 2:输入:s = "AABABBA", k = 1输出:4解释:将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。子串 "BBBB" 有原创 2021-06-28 21:35:05 · 186 阅读 · 0 评论 -
395 至少有 K 个重复字符的最长子串(双指针)
1. 问题描述:给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。示例 1:输入:s = "aaabb", k = 3输出:3解释:最长子串为 "aaa" ,其中 'a' 重复了 3 次。示例 2:输入:s = "ababbc", k = 2输出:5解释:最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。示:1 <= s.length <= 1原创 2021-06-21 22:36:51 · 217 阅读 · 0 评论 -
392 判断子序列(双指针)
1. 问题描述:2. 思路分析:3. 代码如下:原创 2021-06-21 16:01:20 · 124 阅读 · 0 评论 -
344 反转字符串(双指针)
1. 问题描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a原创 2021-06-14 14:40:39 · 118 阅读 · 0 评论 -
287 寻找重复数(寻找环的起点、字典)
1. 问题描述:给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有一个重复的整数,找出这个重复的数 。示例 1:输入:nums = [1,3,4,2,2]输出:2示例 2:输入:nums = [3,1,3,4,2]输出:3示例 3:输入:nums = [1,1]输出:1示例 4:输入:nums = [1,1,2]输出:1提示:2 <= n <= 3原创 2021-05-25 21:40:25 · 151 阅读 · 1 评论 -
283 移动零(双指针)
1. 问题描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes2. 思路分析:分析题目可以知道我们需要将不为0的元素全部移动到nums前面,属于经典的双指针算法问题,我们原创 2021-05-22 15:20:41 · 103 阅读 · 0 评论 -
228 汇总区间(模拟、双指针)
1. 问题描述:给定一个无重复元素的有序整数数组 nums 。返回恰好覆盖数组中所有数字的最小有序区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。列表中的每个区间范围 [a,b] 应该按如下格式输出:"a->b" ,如果 a != b"a" ,如果 a == b示例 1:输入:nums = [0,1,2,4,5,7]输出:["0->2","4->5","7"]解释:区间范围是:[0,2]原创 2021-04-07 09:41:41 · 236 阅读 · 0 评论 -
209 长度最小的子数组(双指针)
1. 问题描述:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]原创 2021-05-08 10:42:48 · 129 阅读 · 0 评论 -
1750 删除字符串两端相同字符后的最短长度(双指针)
1. 问题描述:给你一个只包含字符 'a','b' 和 'c' 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次:选择字符串 s一个 非空的前缀,这个前缀的所有字符都相同。 选择字符串 s一个 非空的后缀,这个后缀的所有字符都相同。 前缀和后缀在字符串中任意位置都不能有交集。 前缀和后缀包含的所有字符都要相同。 同时删除前缀和后缀。请你返回对字符串s执行上面操作任意次以后(可能 0 次),能得到的最短长度。示例 1:输入:s = "ca"输出:2解释:你没法...原创 2021-03-11 10:00:52 · 275 阅读 · 2 评论 -
1711 大餐计数(双指针、字典)
1. 问题描述:大餐是指恰好包含两道不同餐品的一餐,其美味程度之和等于 2 的幂。你可以搭配任意两道餐品做一顿大餐。给你一个整数数组 deliciousness ,其中 deliciousness[i] 是第 i 道餐品的美味程度,返回你可以用数组中的餐品做出的不同大餐的数量。结果需要对 10 ^ 9 + 7 取余。注意,只要餐品下标不同,就可以认为是不同的餐品,即便它们的美味程度相同。示例 1:输入:deliciousness = [1,3,5,7,9]输出:4解释:大餐的美味程度组合为原创 2021-01-06 21:13:37 · 295 阅读 · 1 评论 -
581 最短无序连续子数组(排序-双指针、栈匹配元素对应的位置)
1. 问题描述:给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。输入的数组长度范围在[1, 10,000]。 输入的数组可能包含重复元素,所以升序的意思是<=。来源:力扣(LeetCode)链接:https..原创 2020-11-25 11:12:48 · 160 阅读 · 0 评论 -
26 删除排序数组中的重复项(双指针、模拟)
1. 问题描述:给定一个排序数组,你需要在原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组...原创 2020-11-08 09:01:37 · 125 阅读 · 0 评论 -
1550 存在连续三个奇数的数组(暴力、双指针)
1. 问题描述:给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false 。示例 1:输入:arr = [2,6,4,1]输出:false解释:不存在连续三个元素都是奇数的情况。示例 2:输入:arr = [1,2,34,3,4,5,7,23,12]输出:true解释:存在连续三个元素都是奇数的情况,即 [5,7,23]提示:1 <= arr.length <= 1000 1 <.原创 2020-09-14 19:25:18 · 233 阅读 · 0 评论 -
1577 数的平方等于两数乘积的方法数(字典、字典-双指针)
1. 问题描述:给你两个整数数组 nums1 和 nums2 ,请你返回根据以下规则形成的三元组的数目(类型 1 和类型 2 ):类型 1:三元组 (i, j, k) ,如果 nums1[i]2== nums2[j] * nums2[k] 其中 0 <= i < nums1.length 且 0 <= j < k < nums2.length类型 2:三元组 (i, j, k) ,如果 nums2[i]2== nums1[j] * nums1[k] 其中 0 <..原创 2020-09-13 21:10:17 · 208 阅读 · 0 评论 -
面试题 16.06 最小差(排序 + 二分查找--双指针)
1. 问题描述:给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差示例:输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}输出: 3,即数值对(11, 8)提示:1 <= a.length, b.length <= 100000-2147483648 <= a[i], b[i] <= 2147483647正确结果在区间[-2147483648, 2147483647]内来源:力原创 2020-09-08 23:30:06 · 462 阅读 · 0 评论 -
1237 找出给定方程的正整数解(暴力破解、双指针)
1. 问题描述:给出一个函数f(x, y)和一个目标结果z,请你计算方程f(x,y) == z所有可能的正整数 数对x 和 y。给定函数是严格单调的,也就是说:f(x, y) < f(x + 1, y)f(x, y) < f(x, y + 1)2. 思路分析:3. 代码如下:...原创 2020-07-06 11:15:15 · 419 阅读 · 0 评论 -
1346 检查整数及其两倍数是否存在(map映射、双指针)
1. 问题描述:给你一个整数数组arr,请你检查是否存在两个整数N 和 M,满足N是M的两倍(即,N = 2 * M)。更正式地,检查是否存在两个下标i 和 j 满足:i != j0 <= i, j < arr.lengtharr[i] == 2 * arr[j]示例 1:输入:arr = [10,2,5,3]输出:true解释:N = 10 是 M = 5 的两倍,即 10 = 2 * 5 。示例 2:输入:arr = [7,1,14,11]输...原创 2020-06-04 09:42:26 · 284 阅读 · 0 评论 -
18 四数之和(四指针)
1. 问题描述:给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满...原创 2020-03-11 17:55:55 · 233 阅读 · 0 评论 -
202 快乐数(快慢指针、Set判断是否存在环)
1. 问题描述:编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。示例:输入: 19输出: true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 1001...原创 2020-03-25 23:59:44 · 246 阅读 · 0 评论 -
203 移除链表元素(改变指针指向)
1. 问题描述:删除链表中等于给定值val的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-linked-list-element...原创 2020-04-01 22:43:37 · 419 阅读 · 0 评论 -
1 两数之和(map、快慢指针)
1. 问题描述:给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, ...原创 2020-04-09 23:50:02 · 313 阅读 · 0 评论