这是leetcode第一道题目,属于easy类型。题目的实例内容是:
Given nums = [2,7,11,15], target = 9,
Beacause nums[0]+nums[1] = 9
return [0,1]
这道题用到的主要算法步骤如下:
将数组按照从小到大的顺序排序
同时从数组num两端开始扫描(序号分别为i,j)
判断num[i]+num[j]是否等于target
若num[i]+num[j] > target,则还需要减小大数num[j],也就是j--
若num[i]+num[j] < target, 则还需要增加小数num[i],也就是i++
本题需要解决的两个主要问题有:
找到2个目标数
如何返回对应的下标
对于问题2的解决办法,我用的是一种很笨的方法,也就是再创建一个新的数组来存储原始的未排序的数组,然后将找到的目标
数与新的数组一一对应查找,直到找到目标数在数组中的位置。
具体解决代码如下(C++)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i, j;
i = 0;
j = nums.size() - 1;
vector<int> two_sum;
vector<int> temp;
temp = nums;
sort(nums.begin(), nums.end());
while(i < j)
{
int sum = nums[i]+ nums[j];
if(sum == target)
{
for(int k = 0; k < temp.size(); k ++)
{
if(temp[k] == nums[i] || temp[k] == nums[j])
{
two_sum.push_back(k);
}
}
return two_sum;
}
else if(sum > target)
{
j --;
}
else
{
i ++;
}
}
return two_sum;
}
};