1

问题:给定一个递增顺序的整数数组,返回一个数组,其中包含两个数字的位置(索引+1),这两个数字相加为特定的目标数字

Sol:当我编写代码而不使用 else-if 来检查第二个条件时,我会得到想要的结果:

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int left=0;
        int right=numbers.length-1;
        int arr[]=new int[2];
        while(left<right)
        {
            if(numbers[left]+numbers[right]==target)
            {
                arr[0]=left+1;
                arr[1]=right+1;
            }
             if(numbers[left]+numbers[right]<target)
            {
                left++;
            }
            else
                right--;
        }
        return arr;
        
    }
}

但是当我使用 else-if 而不是 "if" 来检查第二个条件时,就会超出时间限制。谁能解释这背后的原因:

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int left=0;
        int right=numbers.length-1;
        int arr[]=new int[2];
        while(left<right)
        {
            if(numbers[left]+numbers[right]==target)
            {
                arr[0]=left+1;
                arr[1]=right+1;
            }
             else if(numbers[left]+numbers[right]<target) // using else if
            {
                left++;
            }
            else
                right--;
        }
        return arr;
        
    } }
4

1 回答 1

1

解决方案不正确。当您找到结果时,您应该使用break;, 以退出 while 循环。否则,您将进入无限循环,因为您不会更改leftand right

更新的解决方案:

class Solution {
public int[] twoSum(int[] numbers, int target) {
    int left=0;
    int right=numbers.length-1;
    int arr[]=new int[2];
    while(left<right)
    {
        if(numbers[left]+numbers[right]==target)
        {
            arr[0]=left+1;
            arr[1]=right+1;
            break;
        }
         else if(numbers[left]+numbers[right]<target) // using else if
        {
            left++;
        }
        else
            right--;
    }
    return arr;
    
} }
于 2021-08-25T07:15:33.150 回答