#剑指offer Day4 一类 “ 双指针 ”问题
发布日期:2021-07-27 05:04:48
浏览次数:4
分类:技术文章
本文共 1815 字,大约阅读时间需要 6 分钟。
#剑指offer Day4 一类 “ 双指针 ”问题
1. 思路
双指针有两种情况。第一种就是两个指针以相同速度向中间靠近,实行“夹逼准则”,适合有序数组的算法题(即下面所说的两种);第二种就是两个指针的运动速度不一样,即快慢指针,可以找出链表中环的开始位置。
2. 实例
剑指offer 41题:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
//开始还在纠结乘积最小,后来转念一想,a+b=sum,a和b越远乘积越小,而一头一尾两个指针往内靠近的方法找到的就是乘积最小的情况。如果是乘积最大的情况就是一直找到两个指针重合,每次找到一个就将之前返回的结果向量清空然后更新为新找到的。class Solution {public: vector FindNumbersWithSum(vector array,int sum) { vector result; int length = array.size(); int start = 0; int end = length - 1; while (start < end) { if (array[start] + array[end] == sum) // 找到了 { result.push_back(array[start]); // 把这两个数字push进去 result.push_back(array[end]); break; // 一定要 break,不然就陷入死循环 } else if (array[start] + array[end] < sum) // 如果小了,则左指针 右移 start++; else end--; // 如果大了,右指针左移 } return result; }};
剑指offer第42题:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。
//左神的思路,双指针问题//当总和小于sum,大指针继续+//否则小指针+class Solution {public: vector> FindContinuousSequence(int sum) { vector > allRes; int phigh = 2,plow = 1; while(phigh > plow){ int curSum = (phigh + plow) * (phigh - plow + 1) / 2; // 等差数列求和公式 if( curSum < sum) // 如果当前和小于 sum,则右指针后移; phigh++; if( curSum == sum){ // 如果当前和等于 sum,那就把这个等差数列保存起来,push到res里面 vector res; for(int i = plow; i<=phigh; i++) res.push_back(i); allRes.push_back(res); plow++; // 再去找下一个 } if(curSum > sum) // 如果当前和小于 sum,则左指针右移 plow++; } return allRes; // 返回所有答案 }};
转载地址:https://blog.csdn.net/qq_45434780/article/details/114905708 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年09月18日 15时56分32秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
互斥锁 synchronized分析
2019-05-27
java等待-通知机制 synchronized和waity()的使用实践
2019-05-27
win10 Docke安装mysql8.0
2019-05-27
docker 启动已经停止的容器
2019-05-27
order by 排序原理及性能优化
2019-05-27
Lock重入锁
2019-05-27
docker安装 rabbitMq
2019-05-27
git 常用命令 入门
2019-05-27
linux安装docker
2019-05-27
关闭selinx nginx无法使用代理
2019-05-27
shell 脚本部署项目
2019-05-27
spring cloud zuul网关上传大文件
2019-05-27
springboot+mybatis日志显示SQL
2019-05-27
工作流中文乱码问题解决
2019-05-27
maven打包本地依赖包
2019-05-27
spring boot jpa 实现拦截器
2019-05-27
jenkins + maven+ gitlab 自动化部署
2019-05-27
Pull Request流程
2019-05-27
Lambda 表达式
2019-05-27
函数式数据处理(一)--流
2019-05-27