zoukankan      html  css  js  c++  java
  • 剑指Offer(Java版)第十题:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。

    /*
    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
    输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
    例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。
    */
    public class Class10 {
    //因为是一个递增数列的旋转,判断出高低的一个变化位置非常重要
    //可以使用二分法来实现这一过程
    //如果不考虑其他使用简单的排序方法来直接获得最小值也不错。
    public int sortAndFindMin(int[] a){
    int index_low = 0;
    int index_high = a.length - 1;
    if(a.length < 0){
    throw new RuntimeException("数组错误!");
    }
    if(a.length == 0 || a == null){
    throw new RuntimeException("数组为空!");
    }
    if(a.length == 1){
    return a[index_low];
    }
    while(index_low < index_high){
    int index_mid = index_low + (index_high - index_low)/2;
    if(a[index_mid] < a[index_high]){
    index_high = index_mid;
    }
    if(a[index_mid] > a[index_high]){
    index_low = index_mid + 1;
    }
    if(a[index_mid] == a[index_high]){
    index_high--;
    }
    }
    return a[index_low];
    }

    public void test(){
    int[] a = {3, 4, 5, 1, 2};
    System.out.println(sortAndFindMin(a));
    }

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Class10 c = new Class10();
    c.test();
    }
    }

  • 相关阅读:
    面试随缘刷题--day7
    面试随缘刷题--day6
    面试随缘刷题--day5
    面试随缘刷题--day4
    面试随缘刷题--day3 二分专题
    Python 将普通图片转字符画
    相离的圆(排序+二分查找)
    Java利用图灵机器人接口实现简单的聊天程序
    正整数分组(动态规划)
    循环数组最大子段和(动态规划)
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12421515.html
Copyright © 2011-2022 走看看