我寫的還是最簡單的算法:
int* twoSum(int* nums, int numsSize, int target) {
int *result=(int *)malloc(sizeof(int)*2);
for(int i=0;i<numsSize;i++)
{
result[0]=i;
for(int j=i+1;j<numsSize;j++)
{
if(target-nums[i]==nums[j])
{
result[1]=j;
return result;
}
}
}
return NULL;
}
應該至少先排序一下,然後再循環(此題要重新做).
用c++做了一遍,用的是哈希map的做法。其實和我原來的想法差不多,都是一個一個的查,不過用哈希map的算法查找比較快。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
int diff=0,i=0;
if(nums.size()<2)
return result;
map<int,int> temp;
map<int,int>::iterator itmap;
vector<int>::iterator it=nums.begin();
for(it;it!=nums.end;it++)
{
diff=target-(*it);
if(temp.find(diff)!=nums.end())
{
result.push_back(temp[diff]);
result.push_back(i);
break;
}
temp[*it]=i;
i++;
}
return result;
}
};