原创

[百战LeetCode][22.旋转数组的最小数字]


==========================努力奋斗财源广进==========================

一、算法题目

有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。

1、我的题解

import java.util.*;
import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        //此题做过,不算很难,需要理清脉络,中间元素到底和谁比较的问题。
        int len  = array.length;
        if(len == 0) return 0;
        int left = 0;
        int right = len - 1;
        while(left < right){
            int mid = (left + right)/2;
            if(array[mid] < array[right]){
                right = mid;
            } else if(array[mid] > array[right]){
                left  = mid + 1;
            } else if(array[mid] == array[right]){
                right--;
            }
        }
        return array[left];    
    }
}

2、优秀题解

//待定

三、解法心得

此题解使用到二分法,就需要了解旋转数组的特点。取中间值和最后一个值进行对比。根据比对的结果来进行判断。

旋转数组相当于两个升序的数组拼接在一块。根据中间的值和最后元素的对比来判断最小值在前还是后。

比如说中间的元素如果大于最后一个元素了,可以判定最小值在右边。

如果说中间元素小于最后一个元素,可以判定最小值在左边。

如果相等的话,就让去掉最后一个元素再进行比较。

四、自我监督

评论区记录复习记录

算法刷题
  • 作者:北斗七点半联系作者
  • 发表时间:2022-07-17 12:53
  • 版权声明:禁止转载
  • 非公众号转发
  • 评论