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

思路:旋转之后的数组实际上划分为两个排序的子数组,而且前面的子数组的元素都大于或者等于后面子数组的元素。而且最小的元素刚好是这两个子数组的分界线,在排序数组中可以采用二分查找的方法来实现。

public class MinNumberInRotatedArray {public int search(int[] array){//当数组为空或者长度为0的时候返回0if(array == null || array.length <=0){return 0;}//数组不为空且数组的长度大于0int low = 0;int high = array.length - 1;int mid = low;while(array[low] >= array[high]){//两个元素if(high - low == 1){return array[high];}//多于两个元素mid = (low + high)/2;//low、mid和high位置的元素都相同if(array[low] == array[high] && array[mid] == array[high]){//顺序查找return orderSearch(array,low,high);}//如果中间位置的值大于array[low]的值,说明最小值在a[mid]的右边if(array[mid] >= array[low]){low = mid;}else if(array[mid] <= array[high]){high = mid;}}return array[mid];}//顺序查找private int orderSearch(int[] array, int low, int high) {int result = array[low];for(int i = low + 1; i <= high;i++){if(result > array[i]){result = array[i];}}return result;}
}

另一种方式:时间复杂度高一点

public class Solution {public int minNumberInRotateArray(int [] array) {if(array.length==0){return 0;}if(array.length == 1){return array[0];}for(int i = 0;i < array.length-1;i++){if(array[i]>array[i+1]){return array[i+1];}else{if(i == array.length-2){return array[0];}}}return 0;}
}

剑指offe系列之6:旋转数组的最小值相关推荐

  1. 剑指offe面试题8 旋转数组的最小数字 (java实现)

    解题思路: 针对旋转数组的特点,即旋转后,数组的前半部分是有序的,后半部分是有序的. 1.先考虑一般情况:可以参考二分查找的思想,在数组中设置两个指针,一个指向数组的起始位置,一个指向数组的结束位置. ...

  2. 剑指offer面试题[8]-旋转数组的最小数字

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

  3. 【剑指offer-Java版】08旋转数组的最小数字

    旋转数组最小数字:暴力方法就是遍历-有效的方法是二分,但是存在失效的情况 几个特别的测试用例需要注意下: 数组中含有多个相同的数字 最小数字就是第一个 public class _Q08 {publi ...

  4. 剑指offer(12)旋转数组的最小数字

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

  5. 剑指Offer - 面试题11. 旋转数组的最小数字(二分查找)

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

  6. 剑指offer面试题11. 旋转数组的最小数字(二分查找)

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

  7. 剑指offer系列-03.数组中的重复数字

    剑指offer系列第03题.数组中的重复数字 找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...

  8. leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列

    剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...

  9. 数组中其余的排除_[leetcode 剑指offer系列] 面试题04. 二维数组中的查找

    题目难度: 简单 原题链接 今天继续更新剑指 offer 系列, 这道题的优化空间非常大, 个人感觉很适合作为面试题, 值得一做. 大家在我的公众号"每日精选算法题"中的聊天框中回 ...

最新文章

  1. 皮一皮:男生的求生欲,以及神回复...
  2. 计算机主板上电源怎么插,教大家电脑主板上的电源开关插头怎么接
  3. tomcat URL乱码问题
  4. apache日志导入mysql,将Apache访问日志记录到Mysql数据库中
  5. 人工生命 2.0.2 更新,模拟体全息存贮的模式识别
  6. servlet精华讲解
  7. static_cast 与reinterpret_cast
  8. 参与到开源项目中乐趣
  9. canvas设置字体粗细用数字没效果_干货 | 用uni-app制作迷你PS小程序
  10. 「镁客·请讲」ETC社区发起人邹来辉(Roy):我为什么要做ETC社区和狗狗币基金会?...
  11. 算法导论2.3练习答案
  12. 【数据库SQL实战】将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005
  13. 单片机实验(十五)74LS47数码管译码
  14. 程序人生—我已经努力了七年
  15. Amazon DynamoDB
  16. IE显示对象不支持此属性或方法 的解决方法
  17. ESXI和vSphere的安装配置-实现一台电脑硬件虚拟化为两台
  18. 一个想法照进现实-《IT连》创业项目:创业时该不该用新手程序员
  19. SAP Commerce Cloud UI(Spartacus Storefront) 的用户会话管理
  20. IJCAI 阿里论文 | 基于改进注意力循环控制门,品牌个性化排序升级系统来了

热门文章

  1. 计算机毕业设计 SSM学校图书借阅管理系统 图书馆借阅管理系统 图书借阅系统Java
  2. 开源项目推荐:物联网消息引擎EMQ X/大数据平台TDengine/可视化平台Grafana/dgiot
  3. RS-485详解(一)
  4. 软件工程结课论文 敏捷开发在软件工程中的应用 大学编程作业(TUST 天津科技大学 2022年)
  5. leaflet地图原理_leaflet绘制区域(仿高德地图效果)
  6. 171025_matlab_imag函数
  7. 描述计算机内的存储单位及换算关系,计算机存储单位换算
  8. Word无法插入页码怎么办?Word页码选项变灰,无法使用解决方法
  9. s6e3ha3 amoled屏
  10. python 基础代谢率计算_基于python实现计算且附带进度条代码实例