使用 "else-if" 时超过时间复杂度,但使用 "If statement" 时工作正常

Time complexity exceeding while using "else-if" but works fine when using "If statement"

问题:给定一个递增顺序的整数数组,return一个包含两个数字的位置(索引+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;
        
    } }

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

更新的解决方案:

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;
    
} }