
双指针
文章平均质量分 91
双指针算法题
zhangcoder
大一 KEEP CODING!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
L41.【LeetCode题解】三数之和(双指针思想)
使用左右指针left和right来移动,如果满足题目条件,就将{nums[left],nums[right],nums[bound]}尾插到类型为vector<vector<int>> 的ret中。显然需要去重,right前后都是-1,需要跳过重复的情况,可以比较right前后的值是否相同,使用循环来跳过所有重复的情况,因为。的情况下且至少有两个三元组的元素相同时,需要去重,前提是和为0,如果>0或<0,不需要去重。例如给定以下数组[-1,0,1,2,1,-4],排过序后为[-4,-1,0,1,1,2]原创 2025-04-16 14:26:29 · 1277 阅读 · 0 评论 -
L40.【LeetCode题解】查找总价格为目标值的两个商品(剑指offer:和为s的两个数字) (双指针思想,内含详细的优化过程)
购物车内的商品价格按照升序记录于数组price。请在购物车中找到两个商品的价格总和刚好是target。若存在多种情况,返回任一结果即可。[3,15] 或者 [15,3][27,34] 或者 [34,27]原创 2025-04-12 19:36:43 · 1057 阅读 · 0 评论 -
L30.【LeetCode题解】移动零(三种解法)
设一指针ptr,从头到尾遍历数组,发现num[ptr]==0时,执行向前覆盖,尾部填充一个0,但如果只这样写会有问题!移动一次后发现1前面的元素nums[ptr-1]==0,即没有完全移动好1,那么这种情况出现时。:设两个指针prev和cur,当初始prev==0,cur==1时(先排除数组元素。0 --转换--> nums[prev]0 --转换--> nums[prev]0 --转换--> nums[prev]0 :附近没有0,prev和cur都++例如测试数据[0,0,1,0]原创 2025-01-06 15:18:35 · 1011 阅读 · 0 评论 -
L22.5.【LeetCode题解】环形链表(返回环的入口点 方法2)
给定一个链表,返回链表开始入环的第一个节点。从链表的头节点开始沿着。指针进入环的第一个节点为环的入口节点。如果链表无环,则返回。来表示链表尾连接到链表中的位置(索引从 0 开始)。之后断开相遇点与后一个节点之间的链接(设相遇节点为meet,即。这就转换成了相交链表问题,求出相交节点的地址即可。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。为了表示给定链表中的环,我们使用整数。返回索引为 1 的链表节点。返回索引为 0 的链表节点。,则在该链表中没有环。原创 2025-04-25 18:58:20 · 575 阅读 · 0 评论 -
L42.【LeetCode题解】四数之和(双指针思想) 从汇编角度分析报错原因
给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且的四元组bcd你可以按返回答案。原创 2025-04-18 09:49:58 · 1069 阅读 · 0 评论 -
L39.【LeetCode题解】有效三角形的个数 (双指针思想)
left向右移动时,均满足nums[left]+nums[right]==2+9>nums[bound]变化的,因此当nums[i]+nums[j]>nums[k]时,提前结束对k的循环,节省时间。以排过序的数组{2,2,3,4,5,9,10}为例,bound从右向左移动,三层循环,枚举所有三条边的组合,满足"任意两边之和大于第三边",计数器++先对数组排序,之后使用原来的三重循环,只不过在一个一个枚举的时候,(注:虽然2,3,4是重复的,但仍然要计入)2,3,4 (使用第一个 2)原创 2025-04-11 14:16:36 · 705 阅读 · 0 评论 -
L38.【LeetCode题解】盛最多水的容器 (双指针思想)
给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i, 0)和。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。你不能倾斜容器。49图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。1。原创 2025-04-07 21:50:13 · 894 阅读 · 0 评论 -
L37.【LeetCode题解】快乐数(双指针思想)
本题n的类型为int,而int类型的最大值为2147483647,process(2147483647)==260,则给定任意一个。n,process(n)的结果在[1,260],则经过261次运算,至少有两次process执行的结果是相同的,因此结果是循环的。,再判断"快数"和"慢数"相遇的值即可("快数"和"慢数"选任何一个判断其值),如果为1,为快乐数,反之不是快乐数。设"快数"为fast,慢数为slow,初始值都为n,"快数"一次循环变化两次,"慢数"一次循环变化一次,,没有其他不循环的情况。原创 2025-04-05 10:42:40 · 519 阅读 · 0 评论 -
CC30.【C++ Cont】双指针及其衍生算法专题(含移动零、颜色分类)
0时,让nums[i]和nums[cur+1](其值为0)互换位置,可以直接调用STL库的交换函数swap。由线索可以确定三指针的存出发位置:i为遍历指针,需要扫描数组的每个元素,因此从下标为0处出发,本题可以这样分块:由题意可知:将非0元素按原来的顺序放在左块,将为0的元素放在右块。将nums[i]和nums[left]交换位置,使0并入绿色区间。[right,nums.size()-1]为放2的区间。先让[i,right-1]的左右边界的元素交换位置。当nums[i]==0时,i++,cur不动。原创 2025-02-06 09:33:10 · 954 阅读 · 0 评论