LeetCode-1~Two Sum

Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
给定一个int数组,一个指定的int型target,要求找出数组中相加等于target的两个数的索引。假定每个输入只有一个输出。

答案

方法一:

public int[] twoSum(int[] nums, int target) { 
  for (int i = 0; i < nums.length; i++) { 
    for (int j = i + 1; j < nums.length; j++) { 
      if (nums[j] == target - nums[i]) { 
         return new int[] { i, j }; 
      } 
    } 
  } 
  throw new IllegalArgumentException("No two sum solution");
}

时间复杂度:O(n^​2​​)
空间复杂度:O(1)
实际运行时间:42ms


方法二:

public int[] twoSum(int[] nums, int target) { 
    Map map = new HashMap<>(); 
    for (int i = 0; i < nums.length; i++) { 
        map.put(nums[i], i); 
    } 
    for (int i = 0; i < nums.length; i++) { 
        int complement = target - nums[i]; 
        if (map.containsKey(complement) && map.get(complement) != i) { 
            return new int[] { i, map.get(complement) }; 
        } 
    } 
    throw new IllegalArgumentException("No two sum solution");
}

时间复杂度:O(n​​)
空间复杂度:O(n)
实际运行时间:8ms


方法三

public int[] twoSum(int[] nums, int target) { 
    Map map = new HashMap<>(); 
    for (int i = 0; i < nums.length; i++) { 
        int complement = target - nums[i]; 
        if (map.containsKey(complement)) { 
            return new int[] { map.get(complement), i }; 
        } 
        map.put(nums[i], i); 
    } 
    throw new IllegalArgumentException("No two sum solution");
}

时间复杂度:O(n​​)
空间复杂度:O(n)
实际运行时间:6ms

参考LeetCode-1

你可能感兴趣的:(LeetCode-1~Two Sum)