Task:
思路:
比较暴力的方法:两次循环:
代码:
方法一:暴力算法
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
vector<int> vRet;
for(int i=0; i < numbers.size(); i++){
for (int j = i+1; j< numbers.size(); j++){
if((numbers[i] + numbers[j] == target))
{
vRet.push_back(i+1);
vRet.push_back(j+1);
}
}
}
return vRet;
}
};
方法二:
class Solution {
//因为数组是有序的,那么两个指针,一个在头一个在尾,一层循环就能保证结果正确
public int[] twoSum(int[] numbers, int target) {
int start=0;
int end=numbers.length-1;
int result[]=new int[2];
while (start<end){
int temp=numbers[start]+numbers[end];
if(temp==target) {
result[0]=start+1;
result[1]=end+1;
return result;
}else if(temp<target){//如果相加小于target 说明start处太小!因为end已经是最大的了
int t=numbers[start];
start++;
while (numbers[start]==t){//此处大神的优化在于去除与start相等的值来进行比较(感觉像是看了测试用例,然后对应优化的)
start++;
}
}else {
int t=numbers[end];
end--;
while (numbers[end]==t){//道理同上
end--;
}
}
}
return result;
}
}