LeetCode

来源:互联网 发布:java 进程创建原语 编辑:程序博客网 时间:2024/06/12 19:35

题目

  在Two Sum的基础上进行了修改,输入数组是排序的。

思路

  和《剑指Offer》的剑指Offer系列-面试题41:和为s的两个数字以及和为s的正数序列 一样,不再赘述。
  当提交过后以为结果一定是乐于看见的AC,结果发现出现了Submission Result: Time Limit Exceeded错误。查看错误用例,发现是下面这玩意:

[0,……0,2,3,9,……9] (n多个相同的0和n多个相同的9)
5

  想了想,可能是重复的数字太多,每次遍历都需要判断一次是否和target相等,于是加上了一个while循环,跳过重复的数字。

代码

public int[] twoSum(int[] numbers, int target) {    int[] res = new int[2];    if (numbers == null || numbers.length < 2) {        return res;    }    int left = 0;    int right = numbers.length - 1;    while (left < right) {        int tmp = numbers[left] + numbers[right];        if (tmp == target) {            res[0] = left + 1;            res[1] = right + 1;            return res;        } else if (tmp < target) {            int num = numbers[left];            while (num == numbers[left]) {                left++;            }        } else {            int num = numbers[right];            while (num == numbers[right]) {                right--;            }        }    }    return res;}
1 0