O(n^2)解法
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans;
for(int i=0;i<=nums.size()-2;i++)
for(int j=i+1;j<=nums.size()-1;j++)
if(nums[i]+nums[j]==target)
{
ans.push_back(i);
ans.push_back(j);
}
return ans;
}
};
注意点:
- vector动态数组插入数据用push_back,而不是直接赋值,如ans[0]=i;
- vector返回数组中元素个数,用.size(),而不是sizeof(数组名),后者在分配数组内存空间时就确定了,表示对象或者数据占用的内存,而前者则是在运行时确定,表示元素个数。
哈希表解法
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int> maphash;
vector<int> ans;
for(int i=0;i<nums.size();i++)
maphash[nums[i]]=i;
for(int i=0;i<nums.size();i++)
if(maphash.find(target-nums[i])!= maphash.end())
if(maphash.find(target-nums[i])->second!=i)
{
ans.push_back(i);
ans.push_back(maphash.find(target-nums[i])->second);
break;
}
return ans;
}
};
注意:
- 哈希找(target-目标数)对应的下标(即值)与当前数的下表不相等,才算找到一组