题目

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

基本思路

肯定不能直接遍历,失去了这道题的意义

旋转数组其实是由两个有序数组拼接而成的,因此我们可以使用二分法,只需要找到拼接点即可。

(1)array[mid] > array[high]:

出现这种情况的array类似[3,4,5,6,0,1,2],此时最小数字一定在mid的右边。

low = mid + 1

(2)array[mid] == array[high]:

出现这种情况的array类似 [1,0,1,1,1] 或者[1,1,1,0,1],此时最小数字不好判断在mid左边

还是右边,这时只好一个一个试 。

high = high - 1

(3)array[mid] < array[high]:

出现这种情况的array类似[2,2,3,4,5,6,6],此时最小数字一定就是array[mid]或者在mid的左

边。因为右边必然都是递增的。

high = mid

代码

function minNumberInRotateArray(arr)

{

let len = arr.length;

if(len == 0) return 0;

let low = 0, high = len - 1;

while(low < high) {

let mid = low + Math.floor((high-low)/2);

if(arr[mid] > arr[high]) {

low = mid + 1;

} else if(arr[mid] == arr[high]) {

high = high - 1;

} else {

high = mid;

}

}

return arr[low];

}

扩展

二分查找

function binarySearch(data, arr, start, end) {

if (start > end) {

return -1;

}

var mid = Math.floor((end + start) / 2);

if (data == arr[mid]) {

return mid;

} else if (data < arr[mid]) {

return binarySearch(data, arr, start, mid - 1);

} else {

return binarySearch(data, arr, mid + 1, end);

}

}

java旋转数组最小值,【剑指offer】7.旋转数组的最小数字相关推荐

  1. 915. 分割数组、剑指 Offer II 076. 数组中的第 k 大的数字

    LeetCode题解 1.分割数组 2.数组中的第 k 大的数字 1.分割数组 题目描述: ➡️挑战链接⬅️ 分析: 首先题目叙述的很简单: 要求呢 1.左右两个区间元素必须连续 2.左右区间必须都有 ...

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

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

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

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

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

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

  5. 【LeetCode】剑指 Offer 11. 旋转数组的最小数字

    [LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...

  6. 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java

    <LeetCode力扣练习>剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java 一.资源 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组 ...

  7. 【剑指 Offe】剑指 Offer 11. 旋转数组的最小数字

    目录标题 算法汇总 题目 关键点 代码 1.解体方法 - 二分法 思路 代码 时间和空间复杂度 2.解题方法,如暴力法 思路 代码 时间和空间复杂度 算法汇总 以下是所有算法汇总,包括GitHub源码 ...

  8. 【剑指offer】数据结构——数组

    目录 数据结构--数组 直接解 [剑指offer]03.数组中重复的数字 排序法 集合法 原地置换 [剑指offer]04. 二维数组中的查找 [剑指offer]29. 顺时针打印矩阵 [剑指offe ...

  9. 【LeetCode】剑指 Offer 45. 把数组排成最小的数

    [LeetCode]剑指 Offer 45. 把数组排成最小的数 文章目录 [LeetCode]剑指 Offer 45. 把数组排成最小的数 package offer;import java.uti ...

  10. 【LeetCode】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

    [LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 文章目录 [LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 一.双指针 一.双指针 解题思路: ...

最新文章

  1. 虚拟方法及抽象方法在使用上的区别
  2. 【在CSDN创作2021年度总结】2021年的第一场雪,来的比以往更早一些
  3. freetextbox的问题两个
  4. python输入二维数组_python 二维数组键盘输入
  5. python import numpy_python numpy详解
  6. 某大型银行深化系统技术方案之九:核心层之流程数据管理
  7. css就近原则_CSS 三大特性
  8. matlab乘与点乘的区别 (*与.* ^与.^)
  9. POJ 3264:Balanced Lineup(RMQ模板题)
  10. matlab画折现_用matlab画折线图
  11. 苹果计算机格式化磁盘,MAC格式化移动硬盘
  12. 智能开关双控实现方法(附电路图)
  13. 旋转图像 顺时针与逆时针方法
  14. 翟菜花:睡眠里的经济掘金
  15. svn 撤销已经add的文件
  16. JAVA毕业设计飞机航班信息查询系统演示视频2021计算机源码+lw文档+系统+调试部署+数据库
  17. 基于TI Sitara Cortex-A8 ARM AM335x评估板串口
  18. Springboot毕设项目大学生助学贷款申请平台hsy91(java+VUE+Mybatis+Maven+Mysql)
  19. Python语句十大优雅写法
  20. 【搜索神器——Everything】的下载安装使用教程

热门文章

  1. 中国传媒大学公开课:理解人类传播
  2. 人口logistic模型公式_logistic回归模型分析
  3. python程序基本结构有哪三种_【Python基础】Python程序结构有哪些
  4. python 画ks曲线_风控模型—区分度评估指标(KS)深入理解应用
  5. cad直线和圆弧倒角不相切_建议收藏:史上最全CAD快捷键大全
  6. python库下载安装_Windows版的各种Python库安装包下载地址与安装过程
  7. 动态规划实战3-leetcode 55.Jump Game
  8. go语言 python excel_下个10年,Go能取代Python成为开发者的首选语言吗?
  9. dart安装:sdk下载地址( 2.4.0)
  10. php面试专题---1、php中变量存储及引用的原理