LeetCode 剑指 Offer 57. 和为s的两个数字

题目描述

剑指 Offer 57. 和为s的两个数字

image-20241107212055745

思路分析

解法一:双指针(推荐)

核心思路

  • 数组已排序,使用左右指针夹逼。
  • 若和小于目标,左指针右移;若大于目标,右指针左移。
  • 找到和等于目标即返回。


复杂度分析

  • 时间复杂度: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的两个数字 简单 双指针
本文作者:
本文链接: https://hgnulb.github.io/blog/2021/30990822
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!