描述
输入一个升序数组 array 和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回任意一组即可,如果无法找出这样的数字,返回一个空数组即可。
数据范围: 0≤len(array)≤10^5 , 1 ≤ array[i] ≤ 10^6
示例
// 输入:
[1,2,4,7,11,15],15
// 返回值:
[4,11]
// 说明:返回[4,11]或者[11,4]都是可以的
// 输入:
[1,5,11],10
// 返回值:
[]
// 说明:不存在,返回空数组
解题思路
双指针,从首位下标 l=0,最后一位下标 r=len(array)-1 开始,若两数相加大于预期 sum,则 r 左移(r--),若大于预期 sum,则 l 右移(l++),找到等于 sum 的退出
代码实现
/**
* 双指针
*
* @param array int 整型一维数组
* @param sum int 整型
* @return int 整型一维数组
*/
func findNumbersWithSum(array []int, sum int) []int {
result := []int{}
l, r := 0, len(array)-1
for l < r {
tmpSum := array[l] + array[r]
if tmpSum == sum {
result = []int{array[l], array[r]}
break
} else if tmpSum < sum {
l++
} else {
r--
}
}
return result
}
还不快抢沙发