两数之和
这道题的思想就是双指针加上记录数字所在数组的下标。
我的解法:他垃圾了
因为需要排序,但已排序下标就乱了。
我的思路因为说是有唯一结果,相同的数组最多有两个,如果是相同的,必是想两个数和为targart或者这个相同数不与其他数字组成target,所以两个map记录下标足够了
#include<bits/stdc++.h>
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
// write code here
int l=0,r=numbers.size()-1;
map<int,int> mp;
map<int,int> mp1;
for(int i=0;i<numbers.size();i++)
{
if(mp[numbers[i]]==0)
mp[numbers[i]]=i+1;
else
mp1[numbers[i]]=i+1;
}
sort(numbers.begin(),numbers.begin()+numbers.size());
vector<int> v;
while(l<r)
{
if(numbers[l]+numbers[r]==target)
{
if(numbers[l]!=numbers[r])
{
v.push_back(min(mp[numbers[l]],mp[numbers[r]]));
v.push_back(max(mp[numbers[l]],mp[numbers[r]]));
break;
}
else{
v.push_back(min(mp[numbers[l]],mp1[numbers[r]]));
v.push_back(max(mp[numbers[l]],mp1[numbers[r]]));
break;
}
}
else if(numbers[l]+numbers[r]>target)
{
r--;
}
else if(numbers[l]+numbers[r]<target)
{
l++;
}
}
return v;
}
};
别人的思路,使用结构体,把值和下标放在一起存储。