双指针算法
2022/1/23 14:05:58
本文主要是介绍双指针算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
因为之前的时间不连续,这个双指针算法陆陆续续的学了好几天
做题很吃力,今天一口气全部听完,收获也颇多,不知道做题怎样,下午刷题练练手hhh
以下是我个人心得,大佬看了勿喷(我害怕呜呜呜)
双指针算法我觉得要注重两点,第一点:是否有单调性,ij需要往一个方向移动,如果不同方向这个我没试过hhh
比如这个求元素目标和,如果不是升序,那就复杂得多,ij就不能像升序那样那么丝滑的移动
第二点:看i与j的关系,双指针的本质是双层for循环的嵌套的优化,
我个人觉得有三种:i带动j(最长连续不重复子序列),j带动i(是否为子序列),i与j一起动(目标元素和)
大同小异吧,精髓要知道上面三者我把代码放出来一起比较一下:
//i带动j,最长连续不重复子段 for(int i=0,j=0;i<n;i++) { s[a[i]++];//i一直移动 while(j<i&&s[a[i]]>1) j++;//只有当遇见重复元素的时候(只有a[i]能遇见),j向前走 maxn=.... } //j带动i,是否是子串 for(int j=0,i=0;j<m;j++) { if(i<n&&a[i]==b[j]) i++;//只有遇见相匹配时i才会移动,遇见下一个匹配(j一直在动) } //j与i一起动,数组目标和 for(int i=0,j=m-1;i<n;i++) { while(j>=0&&a[i]+b[j]>x) j--;//判断清楚在什么时候指针会移动 *****这个就是在大于x的情况下会动 if(a[i]+b[j]==x) { printf; break; } }
看看i与j的关系,并且判断条件,什么条件呢,就是在看什么情况下i或者j会移动(个人觉得这句话很管用啊,取决了循环中你写的什么内容)
总之三点吧:
①确认单调性
②确定ij关系
③确定好什么时候ij会动
最后注意一下书写习惯,养成好习惯,我当然有我自己的一个习惯啦,hhh
加油!
这篇关于双指针算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么修改Kafka的JVM参数?-icode9专业技术文章分享
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?