题目:给一个数组和一个数字,如果这个数组里有两个数加起来等于这个数字则返回这两个数的下标+1,没有返回null,返回的是一个int数组。
思路:题目很简单,我是直接双层循环暴力解决的,加了一些判断让循环更快一些。
附上代码:
public int[] twoSum(int[] numbers, int target) {
if(numbers==null)return null;
for(int i=0;i<numbers.length-1;i++){
for(int j=i+1;j<numbers.length;j++){
if(target-numbers[i]>numbers[numbers.length-1] || target-numbers[i]<numbers[j])break;
if(numbers[j]==target-numbers[i]){
return new int[]{i+1,j+1};
}
}
}
return null;
}
看到别人的代码,就喜欢这一个,直接一层while解决,一个下标在最前,一个下标在最后,如果小于target第一个下标+1,如果大于target第二个下标-1,只是这段代码好像找不到target没有退出while的判断:
vector<int> twoSum(vector<int>& numbers, int target) {
int lo=0, hi=numbers.size()-1;
while (numbers[lo]+numbers[hi]!=target){
if (numbers[lo]+numbers[hi]<target){
lo++;
} else {
hi--;
}
}
return vector<int>({lo+1,hi+1});
}