Programming

Leetcode-1. Two Sum

Leetcode-1. Two Sum

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].

Example 2:

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

Example 3:

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

<解題>

  1. 從迴圈中先找第一個數,及target和此數的相減值diff
  2. 如果diff在hashMap中,就回傳這個array
  3. 如果沒有的話,就存放在hashmap中->prevMap.put(num,i);
  4. 如果整個迴圈中,沒有成立這樣的組合,就回傳空的array

class Solution {

    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer, Integer> prevMap = new HashMap<>();

        for(int i =0 ; i<nums.length; i++){
            int num = nums[i];
            int diff = target-num;

            if(prevMap.containsKey(diff)){
                return new int[] {i,prevMap.get(diff)};
            }
            prevMap.put(num,i);
        }
        return new int[] {};
    }
}
[2,7,11,15] target = 26
[2,0]
[7,1]
[11,2]

i=3, com=11
[3,2]

<補充> 空的array

new int[] {} 等於 new int [0]
都表示一個空陣列

Brute Force


class Solution {

    public int[] twoSum(int[] nums, int target) {

        for(int i =0; i< nums.length; i++){
            for(int j=i+1; j< nums.length ; j++){
                int complement = target - nums[i];

                if( complement == nums[j]){
                    return new int[] {i,j};
                }
            }
        }
        throw new IllegalArgumentException("no match found");
    }
}