JZ42 和为S的两个数字
和为S的两个数字
题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
要找到和为 S 的两个数字,可以使用双指针的方法。假设给定的升序数组为 numbers,我们可以使用两个指针,一个指向数组的起始位置,另一个指向数组的结束位置。
算法步骤如下:
- 初始化两个指针,一个指向数组的起始位置,即 0,另一个指向数组的结束位置,即 len(numbers)-1。
- 计算当前指针指向的两个数字的和,即 numbers[start] + numbers[end]。
- 如果和等于目标和 S,则返回这两个数字。
- 如果和小于目标和 S,则将起始位置的指针向右移动一位,以增加和的值。
- 如果和大于目标和 S,则将结束位置的指针向左移动一位,以减小和的值。
- 重复步骤 2 到步骤 5,直到找到和为 S 的两个数字,或者起始位置的指针超过结束位置的指针为止。
- 如果没有找到符合条件的两个数字,则返回一个空结果。
func FindNumbersWithSum( array []int , sum int ) []int {
// write code here
if len(array) < 2 {
return nil
}
start, end := 0, len(array) - 1
for start < end {
total := array[start] + array[end]
if total == sum {
return []int{array[start], array[end]}
} else if total < sum {
start++
} else {
end--
}
}
if array[start] + array[end] == sum {
return []int{array[start], array[end]}
}
return nil
}

浙公网安备 33010602011771号