其他分享
首页 > 其他分享> > 第11题:旋转数组的最小数字

第11题:旋转数组的最小数字

作者:互联网

第11题:旋转数组的最小数字

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

示例1:输入 [3,4,5,1,2],返回值为 1

思路

最直观的解法

利用二分法查找的思想实现。

在这里插入图片描述

在这里插入图片描述

代码实现

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        if (rotateArray.size() == 0) {
            return 0;
        }
        int low = 0;
        int high = rotateArray.size() - 1;
        while (low < high) {
            // 处理特殊的情况,两边不是递增的序列
            if (rotateArray[low] < rotateArray[high]) {
                return rotateArray[low];
            }
            
            int mid = (low + high) / 2;
            if (rotateArray[mid] > rotateArray[low]) {  
                low = mid + 1;   // 左边是递增的序列,取右边的第一个值
            }
            else if (rotateArray[mid] < rotateArray[high]) { 
                high = mid;      // 右边有序列,取右边最小值
            }
            else {               // 前面两个相等的时候,low加一继续
                low++;
            }
        }
        return rotateArray[low];
    }
};

标签:11,p2,p1,数字,旋转,数组,rotateArray,指针
来源: https://blog.csdn.net/breadheart/article/details/112645235