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, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
方法1: hash
思路:
由于要返回的是index,那么肯定hash里面的value需要是index,但是需要存储一个set吗?由于这道题给了诸多确定条件:有且有唯一解,这个set只在乎是否有另外一个数且和它的位置和当前 i 不相等。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
if (nums.empty()) return {};
unordered_map<int, int> hash;
// 始终存储着最后一次出现的位置
for (int i = 0; i < nums.size(); i++){
hash[nums[i]] = i;
}
// 开始查找
for (int i = 0; i < nums.size(); i++){
int rest = target - nums[i];
if (hash.count(rest) != 0 && hash[rest] != i){
return {i, hash[rest]};
}
}
return {};
}
};
方法2: two pointer
思路:
用two pointer要先sort,而且还要保留原来的index信息,这个时间度就上去了。