[剑指offer] 旋转数组的最小数字
本文首发于我的个人博客:尾尾部落
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{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] 旋转数组的最小数字相关推荐
- 剑指offer 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组 ...
- LeetCode_每日一题今日份_剑指Offer11.旋转数组的最小数字
题解C int minArray(int* numbers, int numbersSize) {int low = 0;int high = numbersSize - 1;while (low & ...
- 剑指offer-旋转数组的最小数字
旋转数组的最小数字 一.题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1, ...
- 剑指offer--旋转数组的最小数字
记录来自<剑指offer>上的算法题. 题目描述如下: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个选择,输出旋转数组的最小元素.例如数组 ...
- 剑指 Offer-JZ6-旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个 ...
- 剑指offer 把数组排成最小的数 atoi和itoa,pow
pow(x,y)在#include<math.h>文件中,计算x的y次方. C++引入头文件:#include <stdlib.h> 或者 #include <cstdl ...
- 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java
<LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...
- 剑指 Offer 11. 旋转数组的最小数字 简单
剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...
- 剑指offer 11. 旋转数组的最小数字(很详细!)
剑指offer 11. 旋转数组的最小数字 题目 解题思路 代码 题目 解题思路 一开始,我们就能直接想到,数组找最小值,那么不轻轻松松直接遍历一遍,用一个变量记录最小值,然后直接返回不就完事了? 但 ...
最新文章
- nginx php 大小写问题,Nginx实现url请求不区分大小写
- 根据根据图片的url怎么取得图片ImageView对象
- 【机器学习基础】前置知识(五):30分钟掌握常用Matplotlib用法
- linux100day(day5)--编程原理和shell脚本
- 荣耀50样张公布:直出1亿像素 实际效果更出色
- Django实战(一)-----用户登录与注册系统2(数据模型、admin后台、路由视图)
- 利用wsdl.exe生成webservice代理类
- Android加载网络GIF完整解决方案
- java access_Java 连接Access数据库的两种方式
- python 运动模拟_Python中的几何布朗运动模拟
- Excel VBA | 一键批量生成对账单(功能优化版本)
- 微星笔记本的神奇之处
- ubuntu系统镜像下载源
- 免驱无线网卡插到电脑上突然驱动变成瑞昱网卡了无法正常联网
- The 2020 ICPC Asia Macau Regional Contest
- 笔记本电脑网络图标丢失解决流程
- 计算机音乐怎么把音乐放u盘,怎么把音乐拷贝到u盘
- OpenGL十二讲代码
- 参考资料来自 懒兔子 的公众号
- 程序员年底如何升职加薪?这份涨薪指南来了!