1. 程式人生 > 其它 >1 Two Sum(LeetCode HOT 100)

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: