2020.7.20 力扣每日
1 class Solution { 2 public int[] twoSum(int[] numbers, int target) { 3 int len = numbers.length; 4 int left = 0, right = len - 1; 5 int[] res = new int[]{-1,-1}; 6 while (left < right){ 7 if (numbers[left] + numbers[right] == target){ 8 res = new int[]{left+1,right+1}; 9 break; 10 } 11 else if (numbers[left] + numbers[right] > target) 12 right--; 13 else left++; 14 } 15 return res; 16 } 17 }
解题思路:
利用双指针,指向头与尾,比较两值之和与target,若大于,则right--,因为是升序数组,right所指数将减小,两数之和将减小;反之小于则left++。直到left==right,循环结束
注意点:
若不存在,则需返回[-1,-1]。
空间复杂度:O(1)
时间复杂度:O(N),N为数组长度