如何在数组中找到和为“特定值”的三个数?( 二 )
文章插图
文章插图
这样说起来有些抽象 , 我们来具体演示一下:
第1轮 , 访问数组的第1个元素1 , 把问题转化成从后面元素中找出和为12(13-1)的两个数 。
如何找出和为12的两个数呢?我们设置两个指针 , 指针j指向剩余元素中最左侧的元素2 , 指针k指向最右侧的元素12:
文章插图
计算两指针对应元素之和 , 2+12 = 14 > 12 , 结果偏大了 。
由于数组是按照升序排列 , k左侧的元素一定小于k , 因此我们把指针k左移一位:
文章插图
计算两指针对应元素之和 , 2+9 = 11< 12 , 这次结果又偏小了 。
j右侧的元素一定大于j , 因此我们把指针j右移一位:
文章插图
计算两指针对应元素之和 , 3+9 = 12 , 正好符合要求!
因此我们成功找到了一组匹配的组合:1 , 3 , 9
但这并不是结束 , 我们要继续寻找其他组合 , 让指针k继续左移:
文章插图
计算两指针对应元素之和 , 3+7 = 10< 12 , 结果偏小了 。
于是我们让指针j右移:
文章插图
计算两指针对应元素之和 , 5+7 = 12 , 又找到符合要求的一组:
1 , 5 , 7
我们继续寻找 , 让指针k左移:
文章插图
计算两指针对应元素之和 , 5+6 = 11< 12 , 结果偏小了 。
于是我们让指针j右移:
文章插图
此时双指针重合在了一起 , 如果再继续移动 , 就有可能和之前找到的组合重复 , 因此我们直接结束本轮循环 。
第2轮 , 访问数组的第2个元素2 , 把问题转化成从后面元素中找出和为11(13-2)的两个数 。
我们仍然设置两个指针 , 指针j指向剩余元素中最左侧的元素3 , 指针k指向最右侧的元素12:
文章插图
计算两指针对应元素之和 , 3+12 = 15 > 11 , 结果偏大了 。
我们让指针k左移:
文章插图
计算两指针对应元素之和 , 3+9 = 12 > 11 , 结果仍然偏大 。
我们让指针k继续左移:
文章插图
计算两指针对应元素之和 , 3+7 = 10 < 11 , 结果偏小了 。
【如何在数组中找到和为“特定值”的三个数?】我们让指针j右移:
文章插图
计算两指针对应元素之和 , 5+7 = 12 > 11 , 结果又偏大了 。
我们让指针k左移:
文章插图
推荐阅读
- Apple Fitness+播放列表现可在Apple Music搜索上找到
- 一箱饮料在线下卖60元,为何在网上只卖30元?商家道出了实情
- 为何在人工智能研发领域Python应用比较多
- 互联网公司工作狂小伙找到“慢下来”的办法:晨起拍鸟写笔记
- 声网 X Watch Party 如何在线上一起欢快的边看电影边吐槽
- YouTube称找到有力证据表明盗版上传者和DMCA通知来自同个IP
- 昙花一现!实际运营3个月左右,共享电动车退出大悟,原因何在?
- 国家连续3年降电价,用户却表示“越用越贵”?原因找到了
- 云赛道竞争加剧,百度智能云机会何在?
- 亚麻籽油在智能手机屏幕自愈这件事上找到用武之地