zoukankan      html  css  js  c++  java
  • 剑指offer

    题目描述:

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
    输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
    例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
    NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

    code:

    分析:使用二分查找

    • 如果递增,起始位置上移
    • 如果递减,结束位置下移(下移到中间位置,因为-1会有可能错过最小)
    • 其余情况,起始位置+1
    public class Solution {
        public int minNumberInRotateArray(int[] array) {
            //校验数组是否为空
            if (null == array || 0 == array.length) {
                //为空,返回0
                return 0;
            }
            //定义起始位置变量
            int i = 0;
            //定义结束位置变量
            int j = array.length - 1;
            //判断起始位置和结束位置是否重合
            while (i < j) {
                //如果开始位置值小于结束位置值
                if (array[i] < array[j]) {
                    //返回开始位置的值
                    return array[i];
                }
                //取中间位置变量
                int mid = (i + j) >> 1;
                if (array[mid] > array[i]) {
                    //左边有序,则取另一边
                    i = mid + 1;
                } else if (array[mid] < array[j]) {
                    //右边有序,取右边最小的
                    j = mid;
                } else {
                    //起始位置+1
                    i++;
                }
            }
            //返回开始位置的值
            return array[i];
        }
    }
  • 相关阅读:
    【C++标准库】C++11新特性
    使用线程池
    Halcon相机硬触发采集图片
    C#之线程同步
    多线程之异常处理
    java基础 Arrays
    java基础 static关键字
    java基础 String
    c# 更新web.config
    java 基础
  • 原文地址:https://www.cnblogs.com/s-star/p/12512327.html
Copyright © 2011-2022 走看看