【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.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
这题如果嵌套两个循环也可以做,不过时间复杂度是O(n2)。用unordered_map就要简单得多了。将元素值作为key,i作为value。如果在map中没有与遍历的当前元素之和为target,则把当前元素插入map中,这样至少会有一个元素在map中。不过需要注意返回的数组次序问题。
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> inx(2); unordered_map<int, int> map; for (int i = 0; i < nums.size(); i++) { if (map.count(target - nums[i])) { inx[1]=i; inx[0]=map[target - nums[i]]; } else map[nums[i]] = i; } return inx; } };