剑指offe系列之6:旋转数组的最小值
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{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:旋转数组的最小值相关推荐
- 剑指offe面试题8 旋转数组的最小数字 (java实现)
解题思路: 针对旋转数组的特点,即旋转后,数组的前半部分是有序的,后半部分是有序的. 1.先考虑一般情况:可以参考二分查找的思想,在数组中设置两个指针,一个指向数组的起始位置,一个指向数组的结束位置. ...
- 剑指offer面试题[8]-旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个 ...
- 【剑指offer-Java版】08旋转数组的最小数字
旋转数组最小数字:暴力方法就是遍历-有效的方法是二分,但是存在失效的情况 几个特别的测试用例需要注意下: 数组中含有多个相同的数字 最小数字就是第一个 public class _Q08 {publi ...
- 剑指offer(12)旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组 ...
- 剑指Offer - 面试题11. 旋转数组的最小数字(二分查找)
1. 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] ...
- 剑指offer面试题11. 旋转数组的最小数字(二分查找)
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的 ...
- 剑指offer系列-03.数组中的重复数字
剑指offer系列第03题.数组中的重复数字 找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...
- leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列
剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...
- 数组中其余的排除_[leetcode 剑指offer系列] 面试题04. 二维数组中的查找
题目难度: 简单 原题链接 今天继续更新剑指 offer 系列, 这道题的优化空间非常大, 个人感觉很适合作为面试题, 值得一做. 大家在我的公众号"每日精选算法题"中的聊天框中回 ...
最新文章
- 皮一皮:男生的求生欲,以及神回复...
- 计算机主板上电源怎么插,教大家电脑主板上的电源开关插头怎么接
- tomcat URL乱码问题
- apache日志导入mysql,将Apache访问日志记录到Mysql数据库中
- 人工生命 2.0.2 更新,模拟体全息存贮的模式识别
- servlet精华讲解
- static_cast 与reinterpret_cast
- 参与到开源项目中乐趣
- canvas设置字体粗细用数字没效果_干货 | 用uni-app制作迷你PS小程序
- 「镁客·请讲」ETC社区发起人邹来辉(Roy):我为什么要做ETC社区和狗狗币基金会?...
- 算法导论2.3练习答案
- 【数据库SQL实战】将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005
- 单片机实验(十五)74LS47数码管译码
- 程序人生—我已经努力了七年
- Amazon DynamoDB
- IE显示对象不支持此属性或方法 的解决方法
- ESXI和vSphere的安装配置-实现一台电脑硬件虚拟化为两台
- 一个想法照进现实-《IT连》创业项目:创业时该不该用新手程序员
- SAP Commerce Cloud UI(Spartacus Storefront) 的用户会话管理
- IJCAI 阿里论文 | 基于改进注意力循环控制门,品牌个性化排序升级系统来了
热门文章
- 计算机毕业设计 SSM学校图书借阅管理系统 图书馆借阅管理系统 图书借阅系统Java
- 开源项目推荐:物联网消息引擎EMQ X/大数据平台TDengine/可视化平台Grafana/dgiot
- RS-485详解(一)
- 软件工程结课论文 敏捷开发在软件工程中的应用 大学编程作业(TUST 天津科技大学 2022年)
- leaflet地图原理_leaflet绘制区域(仿高德地图效果)
- 171025_matlab_imag函数
- 描述计算机内的存储单位及换算关系,计算机存储单位换算
- Word无法插入页码怎么办?Word页码选项变灰,无法使用解决方法
- s6e3ha3 amoled屏
- python 基础代谢率计算_基于python实现计算且附带进度条代码实例