剑指offer_5_6_旋转数组最小数字

2020-01-20  本文已影响0人  韩who

旋转数组最小数字

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

解法一: 暴力

因为是有排列顺序的,所以依次遍历数组,一直找到比数组第一个数小的数,则为反转数组的第一个值

 public int minNumberInRotateArray(int [] array) {
        if(array.length==0){
            return 0;
        }
       //找到递增数列,则后面的为反转数组,则反转数组第一个数为该数组最小值
        int temp  = array[0];
        int i = 0;
        while(temp<=array[i] && i<array.length){
           i++;
        }
        return array[i];
         
    }

解法二: 二分法

​ 遇到这种情况,直接返回(left)

​ 情况二:

记当前的mid(中间值)为n


import java.util.*;
public class Solution {
    public int minNumberInRotateArray(int [] nums) {
        if (nums.length == 1) {
            return nums[0];
        }
        int l = 0;
        int r = nums.length - 1;
        while (l <= r) {
            int mid = l + (r - l) / 2;
            if (nums[l] < nums[r]) {
                return nums[l];
            }
            if (nums[mid] > nums[mid + 1]) {
                return nums[mid + 1];
            }
            if (nums[mid] < nums[mid - 1]) {
                return nums[mid];
            }
            if (nums[mid] > nums[0]) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        return 0;
    }
}
上一篇下一篇

猜你喜欢

热点阅读