本文共 741 字,大约阅读时间需要 2 分钟。
输入一个递增排序的数组和一个数字S
,在数组中查找两个数,使得他们的和正好是S
,如果有多对数字的和等于S
,输出两个数的乘积最小的。
数组中可能有多对符合条件的结果,而且要求输出乘积最小的,说明要分布在两侧 比如
3,8
5,7
要取3,8
。
看了题目了,很像leetcode
的第一题【两数之和】,但是题目中有一个明显不同的条件就是数组是有序的,可以使用使用大小指针求解,不断逼近结果,最后取得最终值。
left
,从0
开始right
,从array.length
开始array[left] + array[right]
的值s
是否符合条件sum
,right
向左移动sum
,left
向右移动left=right
,没有符合条件的结果function FindNumbersWithSum(array, sum) { let left = 0; let right = array.length - 1; while (left < right) { const s = array[left] + array[right]; if (s > sum) { right--; } else if (s < sum) { left++; } else { return [array[left], array[right]] } } return [];}
整理不易,若对您有帮助,请给个「关注+点赞」,您的支持是我更新的动力 👇
📖数据结构专栏:
🐱Github笔记 :
转载地址:http://hlqmz.baihongyu.com/