题目

M@MG0DZA5IXWYYUV{()B5UB.png
思路
1.暴力遍历,时间复杂度o(n2),空间复杂度o(1)
2.哈希表存储,时间复杂度o(n),空间复杂度o(n)
3.利用两个指针指向一头一尾进行遍历,如果指针的元素之和大于目标值,则尾指针前移一位,如果指针的元素之和小于目标值,则头指针后移一位。时间复杂度o(n),空间复杂度o(1)
代码
class Solution {
public int[] twoSum(int[] numbers, int target) {
int i = 0,j = numbers.length-1;
int[] ans = new int[2];
while(i<j){
if(numbers[i]+numbers[j] == target){
ans[0] = i+1;
ans[1] = j+1;
return ans;
}else if(numbers[i]+numbers[j] > target){
j--;
}else{
i++;
}
}
return ans;
}
}