如何在数组中找到和为“特定值”的三个数?( 三 )
计算两指针对应元素之和 , 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)!
文章插图
文章插图
推荐阅读
- Apple Fitness+播放列表现可在Apple Music搜索上找到
- 一箱饮料在线下卖60元,为何在网上只卖30元?商家道出了实情
- 为何在人工智能研发领域Python应用比较多
- 互联网公司工作狂小伙找到“慢下来”的办法:晨起拍鸟写笔记
- 声网 X Watch Party 如何在线上一起欢快的边看电影边吐槽
- YouTube称找到有力证据表明盗版上传者和DMCA通知来自同个IP
- 昙花一现!实际运营3个月左右,共享电动车退出大悟,原因何在?
- 国家连续3年降电价,用户却表示“越用越贵”?原因找到了
- 云赛道竞争加剧,百度智能云机会何在?
- 亚麻籽油在智能手机屏幕自愈这件事上找到用武之地
