if,elseif多重判断的用法

if,elseif是我们在执行程序的时候,常用的分支判断语句,那么为什么需要if,elseif这种类型的条件判断语句呢?为什么我们不可以直接用if,if替代呢?下面结合一个具体的使用场景来解释原因。

首先看一道题目:

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。

那么这道题目显然可以采用二分查找的思想解决,我们首先用if,if这种类型的语句来解上面的题目,代码如下:

class Solution {
public:
    int minArray(vector& numbers) {
        int left=0,right=numbers.size()-1;
        int mid;
        while(leftnumbers[mid]) //有边有序
                right=mid;
            if(numbers[right]==numbers[mid])
                right--;
        }
        return numbers[right];
    }
};

上述代码,粗略观察好像没什么问题啊,可是如果我们深入的思考一下,会发现会出现bug,问题出在哪里呢?我们可以看到在执行了numbers[right]>numbers[mid]这个判断语句后,我们执行了right=mid,这将导致number[right]==number[mid]这个条件为真,使得该条件中的代码也被执行。这显然违背了我们的初衷,因为我们原始的目的是只执行一条条件分支语句。这时我们就可以应用if,else if来达到上述目的。具体代码如下:

class Solution {
public:
    int minArray(vector& numbers) {
        int left=0,right=numbers.size()-1;
        int mid;
        while(leftnumbers[mid]) //有边有序
                right=mid;
            else if(numbers[right]==numbers[mid])
                right--;
        }
        return numbers[right];
    }
};

 

你可能感兴趣的:(C++基础)