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 }