剑指 Offer II 006. 排序数组中两个数字之和(167. 两数之和 II - 输入有序数组)
题目:
思路:
【1】两道题很相似,一个算下标是从0开始,一个是从1开始,这就是区别之处
【2】思路:暴力双循环,然后可以优化的就是在暴力之上又做二分,但将复杂度由O(N^2)降为了O(nlogn)
【3】但是更优的是利用有序数组这个条件,采用双指针,因为但和小的时候必然向右移,当和大的时候必然左移(取值变小),而且最多也就是要遍历完整个数组。
代码展示:
双指针的写法:
//时间0 ms击败100% //内存41.7 MB击败49.21% class Solution { public int[] twoSum(int[] numbers, int target) { int left = 0,right = numbers.length-1,sum; while (left<right){ sum = numbers[left] + numbers[right]; if (target > sum){ left++; }else if (target < sum){ right--; }else { return new int[]{left,right}; } } return new int[]{}; } }