• 剑指offer(6):旋转数组的最小数字


    题目描述

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
    输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
    例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
    NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
    思路:首先暴力法肯定可以解决,但是不可取,
    用java实现的暴力解决法:
    import java.util.ArrayList;
    public class Solution {
        public int minNumberInRotateArray(int [] array) {
            if(array.length == 0)
                return 0;
            for(int i=0;i<array.length;i++){
                if(array[i]>array[i+1])
                    return array[i+1];
            }
            return array[0];
        }
    }

    二分法进行查找:

    首先,题目中是两个有序子序列,且

    class Solution {
    public:
        int minNumberInRotateArray(vector<int> rotateArray) {
            if(rotateArray.size()<=0)
                return 0;
            int low = 0;
            int high = rotateArray.size()-1;
            int mid;
            while(low<=high){
                mid = low + (high - low) / 2;
                if(rotateArray[mid] > rotateArray[mid+1])
                    return rotateArray[mid+1];
                else if(rotateArray[mid] < rotateArray[mid-1])
                    return rotateArray[mid];
                else if(rotateArray[mid]<rotateArray[low])
                    high = mid - 1;
                else if(rotateArray[mid]>rotateArray[low])
                    low = mid +1;
            }
        }
    };

    注意:把排序数组的前0个元素搬到最后面,即排序数组本身也是数组的一个旋转

     上诉代码没有考虑到含有重复元素的问题

  • 相关阅读:
    apache性能测试工具ab
    MyBatis
    微信小程序时间戳的转换及调用
    关于微信里wx.getUserInfo获取用户信息都是拼音的转成中文方法
    CSS斜切角
    css hsla和rgba的区别
    js中 onreadystatechange 和 onload的区别
    HTML5语音合成Speech Synthesis API简介
    position inherit 定位
    CSS3选择器:nth-child和:nth-of-type之间的差异
  • 原文地址:https://www.cnblogs.com/ttzz/p/13532088.html
Copyright © 2020-2023  润新知