算法篇1-----双指针

接下来也将进行算法的练习,先从简单的双指针开始,以8道列题来透彻理解算法双指针。

1、

定义两个指针,cur,dest

两指针的作用:cur:从左到右扫描数组,遍历数组

dest:已处理的区间内,非0元素的最后一个位置

cur:1>遇到0元素,cur++

2>遇到非0元素,swap(dest+1,cur);

dest++,cur++;

2、

先根据"异地"操作,然后优化成双指针下的就地操作

1>先找到最后一个复写的数

a、先判断cur位置的值

b、决定dest向后移动一步或者两步

c、判断一下dest是否已经到结束为止

d、cur++

1.5>处理一下边界问题

【1,0,2,3,0,4】此为特殊情况

2>从后向前完成

3、

这道题相当于判断链表是否有环

快慢双指针

a、定义快慢双指针

b、慢每次向后一步,快指针移动两步

c、判断相遇时候的值即可

4、

找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。

可以进行暴力枚举,但是会超时,不是最优解。所以利用单调性,使用双指针。

5、

暴力枚举依然可行,用伪代码简单说明一下

for(i=0;i<n;i++)

for(j=i+!;k<n;j++)

for(k=j+1;k<n;k++)

check(i,j,k)

这样写时间复杂度达到了o(n)

优化:先对整个数组排序

再利用单调性,使用双指针算法

x:a+b>c----->right-left,right--

y:a+b<=c------->left++

6、输入一个递增排序的数组和一个数字,再数组中查找两个数,使得它们的和正好时s,如果右多对数字的和等于s,则输出任意一对

若sum>t right--

sum<t left++

sum==t 返回结果

7、

这道题考验代码能力,需要多次练习

排序+暴力枚举+利用set去重,复杂

使用双指针加排序

a、排序

b、固定一个数

c、在该数后面的区间内,利用双指针快速找到两个的和等于-target即可

细节问题:不漏,找到一种结果,不要停,继续查找,当使用玩双指针算法之后,i也需要跳过重复的元素,注意避免越界。

8、

这道题与第7题类似,不再赘述

相关推荐
a1879272183131 分钟前
【算法】动态规划第五篇:区间 DP——从“看什么都像背包“到“最后戳谁“
算法·leetcode·动态规划·dp·区间·区间dp·算法讲解
whitelbwwww35 分钟前
c++ 多线程
开发语言·c++·算法
额鹅恶饿呃37 分钟前
随着CentOS官方停服的时间越来越久,大量仍在使用CentOS7的企业和运维从业者
java·python·算法·c#·ruby
不会就选b42 分钟前
数据结构之数&&二叉树(一)
数据结构
白狐_79842 分钟前
408 数据结构|KMP算法核心:为什么不用主串回退
数据结构·算法
努力努力再努力wz44 分钟前
【Docker入门系列】:从架构演进到容器化:一文建立 Docker、虚拟化与 Namespace 的底层心智模型
运维·开发语言·数据结构·c++·docker·容器·架构
wuyk5551 小时前
13.堆排序:基于完全二叉树的高效排序算法一、什么是堆排序?
开发语言·算法·排序算法
qinzechen1 小时前
本周科技行业热点汇总·2026第36周(2026年8月31日-9月6日)
c++·科技·算法
白狐_7981 小时前
408 数据结构|红黑树 vs AVL:高频考点、易错判断与可能出题方式
数据结构·算法
zuozong_1 小时前
C++类与对象
开发语言·c++·算法