当前位置: 面试刷题>> 两数之和 II - 输入有序数组(经典算法150题)


### 题目描述 **两数之和 II - 输入有序数组** 给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于一个特定目标数。 函数应该返回这两个数的索引值,其中索引1必须小于索引2。 **注意**: - 你可以假设每种输入只会对应一个答案。 - 你可以不可以重复使用相同的元素。 **示例**: ``` 输入: numbers = [2, 7, 11, 15], target = 9 输出: [1, 2] 解释: 2 与 7 相加得到 9。因此 index1 = 1, index2 = 2。 ``` ### PHP 示例代码 ```php function twoSum($numbers, $target) { $left = 0; $right = count($numbers) - 1; while ($left < $right) { $sum = $numbers[$left] + $numbers[$right]; if ($sum == $target) { return [$left + 1, $right + 1]; // 题目要求索引从1开始 } elseif ($sum < $target) { $left++; } else { $right--; } } // 如果没有找到符合条件的两个数,则返回空数组(题目未明确说明,但根据常规理解) return []; } // 示例用法 $numbers = [2, 7, 11, 15]; $target = 9; $result = twoSum($numbers, $target); print_r($result); ``` ### Python 示例代码 ```python def twoSum(numbers, target): left, right = 0, len(numbers) - 1 while left < right: current_sum = numbers[left] + numbers[right] if current_sum == target: return [left + 1, right + 1] # 题目要求索引从1开始 elif current_sum < target: left += 1 else: right -= 1 # 如果没有找到符合条件的两个数,则返回空列表(题目未明确说明,但根据常规理解) return [] # 示例用法 numbers = [2, 7, 11, 15] target = 9 result = twoSum(numbers, target) print(result) ``` ### JavaScript 示例代码 ```javascript function twoSum(numbers, target) { let left = 0; let right = numbers.length - 1; while (left < right) { const sum = numbers[left] + numbers[right]; if (sum === target) { return [left + 1, right + 1]; // 题目要求索引从1开始 } else if (sum < target) { left++; } else { right--; } } // 如果没有找到符合条件的两个数,则返回空数组(题目未明确说明,但根据常规理解) return []; } // 示例用法 const numbers = [2, 7, 11, 15]; const target = 9; const result = twoSum(numbers, target); console.log(result); ``` 在以上示例中,我们使用了双指针的方法来解决这个问题,因为数组已经是有序的,所以我们可以从数组的两端开始向中间遍历,根据当前两数之和与目标值的比较结果来移动指针,从而找到满足条件的两个数。这种方法的时间复杂度为O(n),其中n是数组的长度。
推荐面试题