LeetCode 剑指 Offer 57. 和为s的两个数字
题目描述

思路分析
解法一:双指针(推荐)
核心思路:
- 数组已排序,使用左右指针夹逼。
- 若和小于目标,左指针右移;若大于目标,右指针左移。
- 找到和等于目标即返回。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示数组长度。
- 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
public int[] twoSum(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int sum = nums[left] + nums[right];
if (sum == target) {
return new int[]{nums[left], nums[right]};
}
if (sum < target) {
left++;
} else {
right--;
}
}
return new int[0];
}
}
func twoSum(nums []int, target int) []int {
left, right := 0, len(nums)-1
for left < right {
sum := nums[left] + nums[right]
if sum == target {
return []int{nums[left], nums[right]}
}
if sum < target {
left++
} else {
right--
}
}
return []int{}
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 167. 两数之和 II - 输入有序数组 | 中等 | 双指针 |
| 15. 三数之和 | 中等 | 双指针 |
| 16. 最接近的三数之和 | 中等 | 双指针 |
| 1. 两数之和 | 简单 | 哈希表 |
| 剑指 Offer 57. 和为s的两个数字 | 简单 | 双指针 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!