剑指Offer -6- 旋转数组的最小数字 - C++/Java


题目来源:牛客网——旋转数组的最小数字

题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个 非递减排序 的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。


解题思路:

  • 非递减排序 : 就是递增排序但可能会有连续的相同数字。ex: 123333456
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

代码:

1. C++
class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        if(rotateArray.size() <= 0)
            return NULL;
        int low = 0, high = rotateArray.size() - 1, mid = 0;
        while(low < high){
            // 第一个非递减排序子数组小于第二个非递减排序子数组 ex: 128 3456
            if(rotateArray[low] < rotateArray[high]){
                return rotateArray[low];
            }
            mid = (low + (high-low)) / 2;
            // A[mid]>A[low] 说明mid处于第一个非递减排序子数组
            if(rotateArray[mid] > rotateArray[low]){
                low = mid + 1;
            }
            // A[mid]<A[high] 说明mid处于第二个非递减排序子数组
            else if(rotateArray[mid] < rotateArray[high]){
                high = mid;
            }
            // 如果相等,则low++ 缩小比较范围
            else{
                low ++;
            }
        }
        return rotateArray[low];
    }
};

2. Java
import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] rotateArray) {
        if(rotateArray.length <= 0)
            return -1;
        int low = 0, high = rotateArray.length - 1, mid = 0;
        while(low < high){
            // 第一个非递减排序子数组小于第二个非递减排序子数组 ex: 128 3456
            if(rotateArray[low] < rotateArray[high]){
                return rotateArray[low];
            }
            mid = (low + (high-low)) / 2;
            // A[mid]>A[low] 说明mid处于第一个非递减排序子数组
            if(rotateArray[mid] > rotateArray[low]){
                low = mid + 1;
            }
            // A[mid]<A[high] 说明mid处于第二个非递减排序子数组
            else if(rotateArray[mid] < rotateArray[high]){
                high = mid;
            }
            // 如果相等,则low++ 缩小比较范围
            else{
                low ++;
            }
        }
        return rotateArray[low];
    }
}
发布了50 篇原创文章 · 获赞 15 · 访问量 4772

猜你喜欢

转载自blog.csdn.net/qq_41133986/article/details/104390770