【剑指 Offer】11.旋转数组的最小数字
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
示例 1:
输入:[3,4,5,1,2]
输出:1
示例 2:
输入:[2,2,2,0,1]
输出:0
说明
Java
public class Solution11 {
    public static void main(String[] args) {
        Solution11 s = new Solution11();
        Solution so = s.new Solution();
        System.out.println( so.minArray(new int[] {3,4,5,1,2}) );
        System.out.println( so.minArray2(new int[] {2,2,2,0,1}) );
    }
    class Solution {
        /**
         * 方法一:暴力法
         * 根据题意,可以分析出,是对两个顺序数组分界点的寻找,而且最小数字是分界右边的数字。
         * 直接遍历一遍。
         *
         * 时间复杂度 O(n)
         * 空间复杂度 O(1)
         */
        public int minArray(int[] numbers) {
            for (int i = 0; i < numbers.length - 1; ++i) {
                if (numbers[i] > numbers[i + 1]) {
                    return numbers[i + 1];
                }
            }
            return numbers[0];
        }
        /**
         * 方法二:二分查找
         * 根据题意,可以分析出,是对两个顺序数组分界点的寻找,而且最小数字是分界右边的数字。
         * 1. 如果中轴元素小于右边界元素,说明最小数字在中轴元素左边
         * 2. 如果中轴元素大于右边界元素,说明最小数字在中轴元素右边
         * 3. 如果中轴元素等于右边界元素,则左移右边界元素
         * 通过上面的分析,这其实是一种二分查找的变种
         *
         * 时间复杂度 O(logn)
         * 空间复杂度 O(1)
         */
        public int minArray2(int[] numbers) {
            int low = 0;
            int high = numbers.length - 1;
            while (low < high) {
                int mid = low + (high - low) / 2;
                if (numbers[mid] < numbers[high]) {
                    high = mid;
                } else if (numbers[mid] > numbers[high]) {
                    low = mid + 1;
                } else {
                    high -= 1;
                }
            }
            return numbers[low];
        }
    }
}
C++
Python
总结
【剑指 Offer】11.旋转数组的最小数字的更多相关文章
- ⛅剑指 Offer 11. 旋转数组的最小数字
		20207.22 LeetCode 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小 ... 
- [剑指 Offer 11. 旋转数组的最小数字]
		[剑指 Offer 11. 旋转数组的最小数字] 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5, ... 
- 剑指Offer:旋转数组的最小数字【11】
		剑指Offer:旋转数组的最小数字[11] 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4 ... 
- 【Java】 剑指offer(10) 旋转数组的最小数字
		本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. ... 
- 剑指offer——11旋转数组中最小的数字
		题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ... 
- Go语言实现:【剑指offer】旋转数组的最小数字
		该题目来源于牛客网<剑指offer>专题. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3, ... 
- 剑指OFFER之旋转数组的最小数字(九度OJ1386)
		题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ... 
- 剑指Offer 6. 旋转数组的最小数字 (数组)
		题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ... 
- 《剑指offer》-旋转数组的最小数字
		把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数 ... 
- 剑指offer例题——旋转数组的最小数字
		题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转, ... 
随机推荐
- vue props默认值国际化报错
			未做国际化处理 tabLabel: { type: Array, default: () => (["a", "b", "c"]) } ... 
- Vue 的父组件和子组件生命周期钩子执行顺序是什么
			加载渲染过程父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount-&g ... 
- box-sizing什么时候用?常用的值都有什么?
			一般在做自适应的网页设计的时候用,用这个属性网页结构才不会被破坏. 常用的值: 1. content-box:宽度和高度分别应用到元素的内容框,在宽度和高度之外绘制元素的内边距和边框. 2. bo ... 
- ASP自动刷新页面的实现方法总结
			1) <meta http-equiv="refresh" content="10"> 10表示间隔10秒刷新一次 2) <script> ... 
- 题解 CF1446D2 【Frequency Problem (Hard Version)】
			给出一个跑得快一点的做法,洛谷最优解 (时间是第二名的 \(\frac{1}{2}\)), CF 第一页 D1 首先找到整个序列的众数 \(G\), 很容易证明答案序列中的两个众数中其中一个是 \(G ... 
- java.lang.UnsupportedOperationException: Unable to create instance of org.fisco.bcos.web3j.abi.datatypes.generated.Int256
			Contract Address : 0x967f92adc229b77dda64b42af21ea1ff1b0702eb Unable to create instance of org.fisco ... 
- MySql字符集与排序规则详解
			前段时间往MySQL中存入emoji表情或生僻字.繁体字时,报错无法添加,研究后发现这是字符集编码的问题,今天就来分析一下各个字符集与排序规则 一.字符集 先说字符,字符是各种文字和符号的总称,包括各 ... 
- CSS3全览_文本+视觉+盒子+背景颜色
			CSS全览_文本+视觉+盒子+背景颜色 目录 CSS全览_文本+视觉+盒子+背景颜色 1. 文本属性 2. 视觉格式化基础 3. 内边距, 边框, 轮廓和外边距 4. 颜色, 背景和渐变 作者: ht ... 
- Java详细指南
			Java 基础 并发 JVM Java8 新特性 代码优化 网络 操作系统 数据结构与算法 数据库 系统设计 设计模式 常用框架 网站架构 软件底层 其他 Java 基础 <Head First ... 
- 同学你会hello world吗? 给我讲清楚点
			少点代码,多点头发 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 面试官超级喜欢问hello ... 
