本文首发于我的个人博客:尾尾部落

题目描述

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

解题思路

采用二分查找法。
需要考虑三种情况:

  • array[mid] > array[high]:
    出现这种情况的array类似[3,4,5,6,0,1,2],此时最小数字一定在mid的右边。
    low = mid + 1
  • array[mid] == array[high]:
    出现这种情况的array类似 [1,0,1,1,1] 或者[1,1,1,0,1],此时最小数字不好判断在mid左边
    还是右边,这时只好一个一个试
    high = high - 1
  • array[mid] < array[high]:
    出现这种情况的array类似[2,2,3,4,5,6,6],此时最小数字一定就是array[mid]或者在mid的左
    边。因为右边必然都是递增的。
    high = mid

注意这里有个坑:如果待查询的范围最后只剩两个数,那么mid 一定会指向下标靠前的数字。比如 array = [4,6],

array[low] = 4
array[mid] = 4
array[high] = 6

如果high = mid - 1,就会产生错误, 因此high = mid

参考代码

import java.util.ArrayList;
public class Solution {public int minNumberInRotateArray(int [] array) {int len = array.length;if(len == 0)return 0;int low = 0, high = len - 1;while(low < high){int mid = low + (high - low) / 2;if(array[mid] > array[high]){low = mid + 1;}else if(array[mid] == array[high]){high = high - 1;}else{high = mid;}}return array[low];}
}

[剑指offer] 旋转数组的最小数字相关推荐

  1. 剑指offer 旋转数组的最小数字

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

  2. LeetCode_每日一题今日份_剑指Offer11.旋转数组的最小数字

    题解C int minArray(int* numbers, int numbersSize) {int low = 0;int high = numbersSize - 1;while (low & ...

  3. 剑指offer-旋转数组的最小数字

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

  4. 剑指offer--旋转数组的最小数字

    记录来自<剑指offer>上的算法题. 题目描述如下: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个选择,输出旋转数组的最小元素.例如数组 ...

  5. 剑指 Offer-JZ6-旋转数组的最小数字

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

  6. 剑指offer 把数组排成最小的数 atoi和itoa,pow

    pow(x,y)在#include<math.h>文件中,计算x的y次方. C++引入头文件:#include <stdlib.h> 或者 #include <cstdl ...

  7. 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java

    <LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...

  8. 剑指 Offer 11. 旋转数组的最小数字 简单

    剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...

  9. 剑指offer 11. 旋转数组的最小数字(很详细!)

    剑指offer 11. 旋转数组的最小数字 题目 解题思路 代码 题目 解题思路 一开始,我们就能直接想到,数组找最小值,那么不轻轻松松直接遍历一遍,用一个变量记录最小值,然后直接返回不就完事了? 但 ...

最新文章

  1. nginx php 大小写问题,Nginx实现url请求不区分大小写
  2. 根据根据图片的url怎么取得图片ImageView对象
  3. 【机器学习基础】前置知识(五):30分钟掌握常用Matplotlib用法
  4. linux100day(day5)--编程原理和shell脚本
  5. 荣耀50样张公布:直出1亿像素 实际效果更出色
  6. Django实战(一)-----用户登录与注册系统2(数据模型、admin后台、路由视图)
  7. 利用wsdl.exe生成webservice代理类
  8. Android加载网络GIF完整解决方案
  9. java access_Java 连接Access数据库的两种方式
  10. python 运动模拟_Python中的几何布朗运动模拟
  11. Excel VBA | 一键批量生成对账单(功能优化版本)
  12. 微星笔记本的神奇之处
  13. ubuntu系统镜像下载源
  14. 免驱无线网卡插到电脑上突然驱动变成瑞昱网卡了无法正常联网
  15. The 2020 ICPC Asia Macau Regional Contest
  16. 笔记本电脑网络图标丢失解决流程
  17. 计算机音乐怎么把音乐放u盘,怎么把音乐拷贝到u盘
  18. OpenGL十二讲代码
  19. 参考资料来自 懒兔子 的公众号
  20. 程序员年底如何升职加薪?这份涨薪指南来了!

热门文章

  1. Android检测网络是否正常代码!
  2. VRRP,HSRP介绍及配置
  3. 500 强IT公司武汉诚聘 .Net Specialist (Team Leader)
  4. 【转】TeXmacs:一个真正“所见即所得”的排版系统
  5. 赛门铁克调研发现越来越多的物联网设备被用于实施DDoS攻击
  6. mybatis热加载的实现
  7. VB6.0操作SQL Server——增删改查
  8. 文件类型总结 MIME
  9. 使用zabbix监控mariadb性能状态
  10. Makefile-filter和filter-out