LeetCode – TwoSum

LeetCode – TwoSum

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]

Constraints:

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

public class Solution {
	public int[] TwoSum(int[] nums, int target) {
        Hashtable hash = new Hashtable();
        for (int i = 0; i < nums.Length; i++)
        {
            var complement = target - nums[i];
            if (hash.ContainsKey(complement))
            {
                return new int[]{(int)hash[complement], i};
            }
            else
            {
                if (hash.ContainsKey(nums[i]) == false)
                    hash.Add(nums[i], i);
            }
        }
        
        return null;
    }
}

多年前練習過的題目,暴力解是兩個迴圈去倆倆比對(O(N2),此題更優的解法是利用HashTable去建立快取

每比對到跟目標的差,都先記到hashtable中,直到遍歷了每一個元素一次就好,若剛好match到,就代表找到結果了!這樣的話就至少是O(N)的複雜度了。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *