zoukankan      html  css  js  c++  java
  • 蓝桥学院2019算法题2.17

     题2:旋转数组的最小数字(改造二分法)

    算法思路,先二分查找,最小的数应该在无序的那边。

     1 package recursion;
     2 
     3 /**
     4  * @author zsh
     5  * @company wlgzs
     6  * @create 2019-02-18 10:49
     7  * @Describe 题2·旋转数组的最小数字(改造二分法)
     8  * 把一个数组最开始的作干个元素搬到数组末尾,我们称之为数组的旋转。
     9  * 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
    10  * 例如数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,
    11  * 该数组的最小值为1。
    12  */
    13 public class Main5 {
    14 
    15     /**
    16      * 查找数组最小值
    17      * @param arr 待查找的数组
    18      * @return 最小值
    19      */
    20     static int min(int[] arr){
    21         //头指针
    22         int begin = 0;
    23         //尾指针
    24         int end = arr.length -1;
    25         //考虑到没有旋转这种特殊的旋转
    26         if (arr[begin] < arr[end])
    27             return arr[begin];
    28         //begin与end指向相邻元素,退出
    29         while (begin +1 <end){
    30             int middle = ((begin + end) >>> 1);
    31             //注意特殊情况
    32             //如果arr[begin] == arr[middle] == arr[end] ,采用扫描法
    33             if (arr[begin] == arr[end] && arr[begin] == arr[middle] && arr[middle] == arr[end]){
    34                 int min = 0;
    35                 for (int i = 0; i < arr.length; i++) {
    36                     if (arr[i] < min){
    37                         min = arr[i];
    38                     }
    39                 }
    40                 return min;
    41             }
    42             //左边有序
    43             if (arr[middle] >= arr[begin]){
    44                 begin = middle;
    45             }else {
    46                 //右边有序
    47                 end = middle;
    48             }
    49         }
    50         return arr[end];
    51     }
    52 
    53     public static void main(String[] args) {
    54         int[] arr = new int[]{5,1,2,3,4};
    55         System.out.println(min(arr));
    56         arr = new int[]{2,3,4,5,6};
    57         System.out.println(min(arr));
    58         arr = new int[]{1,0,1,1,1};
    59         System.out.println(min(arr));
    60     }
    61 }
  • 相关阅读:
    论企业家的修养七“善”(转)
    2009中国企业家新春联谊会
    独步红尘
    诗人的悲哀
    我们恋爱吧
    为妈妈祈福
    向总统学习形像包装!【强烈推荐】
    为了你,我开始学着写诗
    亲爱的,我们去私奔吧
    要做最好的自己:“优化”大脑的22条有效方法
  • 原文地址:https://www.cnblogs.com/zsh-blogs/p/10395622.html
Copyright © 2011-2022 走看看