zoukankan      html  css  js  c++  java
  • <剑指offer> 第6题

    题目:

    把一个数组最开始的若干个元素搬到数组的末尾,称之为数组的旋转。

    输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。

    例如{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1

    思路:二分查找

    取两个指针low和high分别指向arr的第一个值和最后一个值,mid=low + (high - low)/2,将原数组看为两个递增数组,且左边数组的所有值大于右边数组所有制

    当array[low] >= arr[high],考虑三种情况:

    (1)arr[mid] > arr[low]

    则mid一定在数组1中,令low=mid

    (2)arr[mid] < arr[high]

    则mid一定在数组2中,令high=mid

    (3)当arr[low] = arr[high] = arr[mid]

    遍历法找最小值,如{1,1,1,0,1}

    当high-low == 1时,找到最小值为arr[high]

    代码实现:

    public class Sixth {
        public static int returnMin(int[] arr){
            if(arr.length == 0){
                return 0;
            }
    
            int low = 0;
            int high = arr.length - 1;
            int min = 0;
            int mid = 0;
            while(arr[low] >= arr[high]){
                if(high - low == 1){
                    min = arr[high];
                    break;
                }
                mid = low + (high - low) / 2;
                if(arr[low] == arr[mid] && arr[mid] == arr[high]){
                    min = sortArray(arr);
                    break;
                }
                if(arr[mid] > arr[low]){
                    low = mid;
                }
                if(arr[mid] < arr[high]){
                    high = mid;
                }
                
            }
            return min;
        }
    
        public static int sortArray(int[] array){
            int min = array[0];
            for(int i = 0; i < array.length; i ++){
                if(array[i] < min){
                    min = array[i];
                }
            }
            return min;
        }
        public static void main(String[] args){
            int[] arr = {1,1,1,0,1};
            System.out.println(returnMin(arr));
        }
    }
  • 相关阅读:
    require的特点
    require和load的不同之处
    关于“load”方法
    puts方法要点
    用类解释对象的由来
    以方法调用的原理解释Ruby中“puts ‘Hello‘”
    Ruby中方法的设计理念
    Ruby中puts,print,p的区别
    Ubuntu16.04安装MongoDB的Ruby驱动
    使用spring框架,用xml方式进行bean装配出现“The fully qualified name of the bean's class, except if it serves...”
  • 原文地址:https://www.cnblogs.com/HarSong13/p/11325052.html
Copyright © 2011-2022 走看看