题目:
暴力方法:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
bool flag=false;
for(int i=0;i<nums.size();i++){
int tempValue=target-nums[i];//求解另一个值
for(int j=i+1;j<nums.size();j++){
if(tempValue==nums[j]){
res.push_back(i);
res.push_back(j);
flag=true;
break;
}
}
if(flag){
break;
}
}
return res;
}
};
优化方法:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res1;
//有重复的值且是 目标值的半倍情况
int count=0;
for(int i=0;i<nums.size();i++){
if(nums[i]==target/2){
count+=1;
res1.push_back(i);
}
}
if(count==2){
return res1;
}
vector<int> res;
//无重复的值情况
std::unordered_map<int,int> hashMap;
for(int i=0;i<nums.size();i++){
if(target==2*nums[i]){
continue;//去除干扰的二倍对称值
}
hashMap[target-nums[i]]=i;//求解另一个值 <另一个值,索引>
}
for(int i=0;i<nums.size();i++){
auto it=hashMap.find(nums[i]);
if(it!=hashMap.end()){
res.push_back(i);
res.push_back(it->second);
break;
}
}
return res;
}
};