LeetCode 热题 HOT 100__1. 两数之和
1. 两数之和
- 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
思路1:
最为直接的方法是直接将每一个数进行两两匹配,双层for循环看是否能得到target。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
for(int i = 0;i < n;i ++){
for(int j = i+1;j < n;j ++){
if(target == nums[i]+nums[j]) return {i,j};
}
}
return {};
}
};
思路2:
利用hash表的特性(可以快速找出某个值是否存在hashtable中),可以省略一层for循环,达到O(n)的时间复杂度。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
map<int,int> hashtable;
for(int i = 0;i < n;i ++){
auto it = hashtable.find(target-nums[i]);
if(it != hashtable.end()) return {it->second, i};
hashtable[nums[i]] = i;
}
return {};
}
};