一 题干
二 暴力求解
暴力求解是经过两次遍历对数据进行遍历,时间复杂度为O(n2),空间复杂度为O1
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
// 方式一 循环遍历
int index1 = 0;
int index2 = 0;
vector<int> outvc = {0,0};
for(int i = 0; i< nums.size(); i++){
for(int j = 0; j < nums.size(); j++){
if(nums[i] + nums[j] == target){
outvc[0] = i;
outvc[1] = j;
return outvc;
}
}
}
return outvc;
}
};
三 查找表法
暴力求解空间复杂度过高,采用哈希表去记录遍历过的数据,因此不需要进行二次循环遍历,时间复杂度降低为On,空间复杂度增加为On
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int, int> mymap;
for (int i = 0; i < nums.size(); i++) {
if (mymap.count(target - nums[i])) {
int index1 = mymap[target - nums[i]];
int index2 = i;
return vector<int>{index1,index2};
}
else {
mymap[nums[i]] = i;
}
}
return vector<int>();
}
};