使用 "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 循环。否则,您将进入无限循环,因为您不会更改 left
和 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;
} }
问题:给定一个递增顺序的整数数组,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 循环。否则,您将进入无限循环,因为您不会更改 left
和 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;
} }