题目描述

image.png

解题思路

哈希表的空间复杂度O(n)
双指针O(1)
算法流程:

  • 初始化: 双指针 i , j 分别指向数组 nums 的左右两端 (俗称对撞双指针)。
  • 循环搜索: 当双指针相遇时跳出;
    • 计算和 s = nums[i] + nums[j];
    • 若 s > targett ,则指针 jj 向左移动,即执行 j = j - 1 ;
    • 若 s < target ,则指针 ii 向右移动,即执行 i = i + 1 ;
    • 若 s = target ,立即返回数组 [nums[i], nums[j]] ;
  • 若循环结束,则返回空数组,代表无和为 targettarget 的数字组合。
    1. class Solution {
    2. /**
    3. * 双指针法
    4. *
    5. * @param nums
    6. * @param target
    7. * @return
    8. */
    9. public int[] twoSum(int[] nums, int target) {
    10. int left = 0;
    11. int right = nums.length - 1;
    12. while (left <= right) {
    13. if (nums[left] + nums[right] > target) {
    14. right--;
    15. } else if (nums[left] + nums[right] < target) {
    16. left++;
    17. }else {
    18. return new int[]{nums[left],nums[right]};
    19. }
    20. }
    21. return new int[]{};
    22. }
    23. }