剑指 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[]{};
    }
}

 

posted @ 2023-02-28 16:49  忧愁的chafry  阅读(11)  评论(0编辑  收藏  举报