描述

输入一个升序数组 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
}

本文由 一切随风 创作,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论