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)的複雜度了。