方法一:暴力循环
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
for(int i=0;i<nums.size();i++){
for(int j=i+1;j<nums.size();j++){
if(nums[i]+nums[j]==target){
result.push_back(i);
result.push_back(j);
return result;
}
}
}
return result;
}
};
方法二:前后查找
class Solution {
public:
// 1. 先对数组排一下序
// 2. 由于数组没有同一元素,可以【i向后,j向前 进行查找两个元素】
// 3. 然后在原数组里找到两个元素的位置 返回结果
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
vector<int> oldnums=nums;
sort(nums.begin(), nums.end());
int i=0,j=nums.size()-1,a,b;
//找到两个元素
while(i<j){
if(nums[i]+nums[j]==target){
a=nums[i];
b=nums[j];
break;
}
if(nums[i]+nums[j]<target){
i++;
}
else{
j--;
}
}
// 找到两个元素的位置
for(i=0;i<oldnums.size();i++){
if(oldnums[i]==a||oldnums[i]==b){
result.push_back(i);
}
}
return result;
}
};
方法三:哈希表
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hashtable;
for (int i = 0; i < nums.size(); ++i) {
auto it = hashtable.find(target - nums[i]);
if (it != hashtable.end()) {
return {it->second, i};
}
hashtable[nums[i]] = i;
}
return {};
}
};