如何在数组中找到和为“特定值”的三个数?( 二 )
文章插图
文章插图
这样说起来有些抽象 , 我们来具体演示一下:
第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左移:
文章插图
- 阿里女员工:30还单身,感觉这辈子难找到对象,网友:要求高了
- 如何找到手机录屏功能?这3种一键打开的方法,值得学习一下
- 如何在短时间内快速成为软件开发专家
- 如何在 Ubuntu 上安装深度(Deepin)桌面环境
- 移动售货机器人,如何在商业综合体找到布局点,做到收益最大化?
- 数据科学高峰论坛在深召开,探讨剥开数据找到经济逻辑
- 如何在Mac上重建Spotlight索引?
- 如何在6分钟内创建1款HoloLens应用??
- 分享头条面试题,是不是又凉了呢
- 实体店纷纷“倒闭”的原因找到了,别错怪电商,和这3个原因有关