如何在数组中找到和为“特定值”的三个数?( 三 )
计算两指针对应元素之和 , 5+6 = 11 , 于是我们又找到符合要求的一组:
2 , 5 , 6
我们继续寻找 , 让指针k左移:
文章插图
此时双指针又一次重合在一起 , 我们结束本轮循环 。
按照这个思路 , 我们一直遍历完整个数组 。
像这样利用两个指针指向数组两端 , 不断向中间靠拢调整来寻找匹配组合的方法 , 就是双指针法 , 也被称为“夹逼法” 。
文章插图
文章插图
public static List
上面这段代码表面上有三层循环 , 但每一轮指针j和k的移动次数加起来最多n-1次 , 因此该解法的整体时间复杂度是O(n2) 。> threeSumv2(int[] nums, int target) {Arrays.sort(nums);List
> resultList = new ArrayList
>();//大循环for (int i = 0; i < nums.length; i++) {int d = target - nums[i];// j和k双指针循环定位 , j在左端 , k在右端for (int j=i+1,k=nums.length-1; j
最关键的是 , 该解法并没有使用额外的集合(排序是直接在输入数组上进行的) , 所以空间复杂度只有O(1)!
文章插图
文章插图
- 阿里女员工:30还单身,感觉这辈子难找到对象,网友:要求高了
- 如何找到手机录屏功能?这3种一键打开的方法,值得学习一下
- 如何在短时间内快速成为软件开发专家
- 如何在 Ubuntu 上安装深度(Deepin)桌面环境
- 移动售货机器人,如何在商业综合体找到布局点,做到收益最大化?
- 数据科学高峰论坛在深召开,探讨剥开数据找到经济逻辑
- 如何在Mac上重建Spotlight索引?
- 如何在6分钟内创建1款HoloLens应用??
- 分享头条面试题,是不是又凉了呢
- 实体店纷纷“倒闭”的原因找到了,别错怪电商,和这3个原因有关