1 Two Sum(LeetCode HOT 100)

Description:
Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.
Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0,1] or [1,0].

Example 2:

Input: nums = [3,2,4], target = 6
Output: [1,2]

Example 3:

Input: nums = [3,3], target = 6
Output: [0,1]

Constraints:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • Only one valid answer exists.

Soulution:

public int[] solution(int[] nums, int target) {
        HashMap<Integer, Integer> numsMap = new HashMap<>(nums.length);
        for (int i = 0; i < nums.length; ++i) {
            int x = nums[i];
            int y = target - x;
            Integer index = numsMap.get(y);
            if (index != null) {
                return new int[]{i, index};
            } else {
                numsMap.put(x, i);
            }
        }
        return new int[]{0, 0};
    }

Idea:
暴力解法的时间复杂度是O(n2)。
通过HashMap,对另一个加数的搜索复杂度降低到O(1)。
所以只需遍历一遍,就可以得出结果。

Result:

posted @ 2022-03-16 23:37  supermingjun  阅读(28)  评论(0编辑  收藏  举报