zoukankan      html  css  js  c++  java
  • 剑指offer-旋转数组的最小数

    题目描述

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

    NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

    public class Test {
        public static void main(String[] args) {
            int[] array = {3,4,5,1,2};
            System.out.println(Test.minNumberInRotateArray(array));
        }
        
        /**
         * 
         * @param array
         * @return
         */
        public static int minNumberInRotateArray(int [] array) {
            if(array.length == 0) return 0;  // 数组长度为0, 返回0
            int left = 0;   // 开始处理的第一个位置
            int right = array.length - 1;   // 开始处理的最后一个位置
            int mid = left;   // 设置初始位置 
            // 确保left在前面排好序的位置,right在后面排好序的位置
            while(array[left] >= array[right]) {
                // 当处理数据只有两个返回后一个结果
                if(right - left == 1) {
                    return array[right];
                }
                // 取中间的位置
                mid = (left + right) / 2;
                // 如果三个数相等,顺序查找最小值
                if((array[left] == array[mid]) && (array[left] == array[right]) && (array[mid] == array[right]) ) {
                    return minNum(array, left, right);
                } else if(array[left] >= array[mid]) { // 中间数据在后半部分,最小值在当前mid前面
                    right = mid;
                } else {  // 中间数据在前半部分,最小值在当前mid后面
                    left = mid;
                }
            }
            return array[mid];
        }
    
        private static int minNum(int[] array, int left, int right) {
            int min = array[left];
            for(int i=left+1; i<=right; i++) {
                if(array[i] < min) {
                    min = array[i];
                }
            }
            return min;
        }
    }
  • 相关阅读:
    cube.js 上下文实践的一些说明
    sitespeed.io 开源web 性能监控&&优化工具集
    sideway/joi js 强大的data schma 校验框架
    cube.js 最新版本的一些特性
    cube.js 支持的类型以及格式化
    cube.js 多租户模式使用一个说明
    airbyte 基于singer 扩展的EL 平台
    cube.js dimensions 的一些说明
    cube.js measures 的一些说明
    cube.js 上下文变量
  • 原文地址:https://www.cnblogs.com/zywu/p/5766221.html
Copyright © 2011-2022 走看看