双指针
三二一一二三
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
941.有效的山脉数组
i<n-1,j>0;) {//停在最高处//停在最高处else break;=0 && j!//只有半座山也不算山脉。原创 2025-04-16 13:53:20 · 261 阅读 · 0 评论 -
7.2.141. 环形链表
public://双指针//直接用结论一while (q!p=p->next;原创 2025-04-15 13:23:15 · 248 阅读 · 0 评论 -
3.4.844. 比较含退格的字符串
public://双指针从后向前遍历//代表两个字符串'#'的数量while (i>=0) {//从后往前遍历//记录退格数else {//如果不是退格//退格发挥作用else break;//没有退格了,要比较了i--;//遍历i的做法else {//如果不是退格else break;//没有退格了。要比较了j--;//下面是主逻辑。上面是处理退格的逻辑//遍历完了至少一个。在这是整个while的出口if (s[i]!//直接判断i--;j--;原创 2025-03-29 15:47:06 · 164 阅读 · 0 评论 -
3.3.283. 移动零
public://快慢指针int j=0;i<n;i++) {//直接去掉所有重复0。去重操作。注意边界一定要下。不然会报错if (i<n) {i<n;原创 2025-03-28 21:30:36 · 201 阅读 · 0 评论 -
3.2.26. 删除有序数组中的重复项
public://快慢指针int j=1;i<n;i++) {//0不用用到。所以都从0开始遍历。return j;原创 2025-03-28 21:11:10 · 231 阅读 · 0 评论 -
9.18. 四数之和
public:i<n;i++) {//一级剪枝去重//和上一道题的区别是上一道题target确定==0//去重j<n;j++) {//二级剪枝去重//双指针。左闭右闭int l=j+1;int r=n-1;while (l<r) {//左闭右闭,相等没意义else {l++;r--;return res;原创 2025-03-22 17:15:18 · 288 阅读 · 0 评论 -
9.15. 三数之和
public://先排序i<n;i++) {//选一个数为起点,在这个数后面的范围选。//剪枝。后面的数一定比这个数大。一定回不到0//去重,防止出现重复的二元组。//双指针int l=i+1;int r=n-1;while (l<r) {//左闭右闭。相等没意义。//最大值变小点//最小值变大点else {//再去重//最后执行一次。l++;r--;return res;原创 2025-03-22 16:50:07 · 180 阅读 · 0 评论 -
7.160.相交链表
pb)的条件会陷入死循环。先把while写完再回头看,回头排除这种情况。注意例如pa短pb长,pa到尾了换到pb,再到尾之后就pa就指向NULL了!而不是说再回到a链表。题目要求的是相交节点的指针。注意节点一样是指针指向的内存空间一样,而不是内存空间存的值一样。从示例里的文字说明里得知,相交链表中相交节点以后的节点都相同。可能长的包括了短的整条链表。双指针最后会在相交节点处相遇或同时指向NULL。相交节点即相交的起始节点,相交节点以后的节点都是一样的。相交节点以前的节点不同。的评论区的方法更好。原创 2025-01-02 19:09:24 · 320 阅读 · 0 评论 -
6.19.删除链表的倒数第N个节点
实际上题目既然给了倒数第n个节点,那应该暗含n不会超过总长度N?因为也没说超过了怎么处理,或者是即使超过了处理也没区别?虚拟头结点看成第0位,最后的NULL看成第N+1位。区别在于条件有个fast!关键还是在判断步数。原创 2025-01-02 12:58:07 · 252 阅读 · 0 评论 -
5.24.两两交换链表节点
0指向2的步骤中,一开始就用上tmp。虽然对,但是不方便思路。有时得回想一下这个tmp是什么意思。所以说临时节点等到临时再用比较好。等号左边的next是指针方向。等号右边的next是节点。个人喜欢写点注释怕忘了。保持自己代码的可解释性。可以看到三个步骤三句代码有阶梯状的特征。原创 2025-01-02 11:46:25 · 165 阅读 · 0 评论 -
4.206.反转链表
p也就是答案中的cur,指向当前节点。q为pre,指向前一个节点。链表中我习惯用pq定义双指针。数组中我习惯用ij定义。原创 2025-01-02 11:11:48 · 159 阅读 · 0 评论 -
3.替换数字
cin>>s;int cnt=0;i<s.size();i++) {//旧长度的序号//扩容。//每个数字翻6倍的长度,就是每个数字加5个长度//新长度的序号//新旧长度一起开始移动while (idx1>=0) {//从后向前填充,避免数组的移动//遇到数字的话} else {//遇到字母的话照常复制idx1--;return 0;原创 2025-03-17 23:00:10 · 372 阅读 · 0 评论 -
1.344.反转字符串
i++,j--) {原创 2025-03-17 21:15:16 · 171 阅读 · 0 评论 -
3.27.移除元素
(样例会拿这个返回的数组长度去输出。原创 2025-01-01 12:02:55 · 207 阅读 · 0 评论
分享