题目描述

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

题目分析

JS特性解法:数组的Math.min特性(时间要费时一些)

二分解法:假定最小数的下标为low,数据相当于两部分,前一部分非递减(相等或者递增),后一部分非递减(相等或者递增),mid = low + (high - low)/2 ;三种情况(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注意这里有个坑:如果待查询的范围最后只剩两个数,那么mid 一定会指向下标靠前的数字比如 array = [4,6],array[low] = 4 ;array[mid] = 4 ; array[high] = 6 ;如果high = mid - 1,就会产生错误, 因此high = mid但情形(1)中low = mid + 1就不会错误

代码

function minNumberInRotateArray(rotateArray)
{   //JS特性解法if(rotateArray.length==0)return 0;return Math.min.apply(null,rotateArray);
}
function minNumberInRotateArray(rotateArray)
{   //二分解法var low=0,high=rotateArray.length-1;while(low<high){var mid = parseInt(low + (high - low)/2);if(rotateArray[mid]>rotateArray[high]){low = mid + 1;}else if(rotateArray[low]==rotateArray[high]){high-=1;}else{high = mid;}}return rotateArray[low];
}

转载于:https://www.cnblogs.com/Shinea_SYR/p/9613812.html

剑指offer-06-旋转数组的最小数字相关推荐

  1. 剑指Offer #06 旋转数组的最小数字(二分查找)| 图文详解

    题目来源:牛客网-剑指Offer专题 题目地址:旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小 ...

  2. 剑指offer——06旋转数组的最小数字(Python3)

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

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

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

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

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

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

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

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

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

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

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

  8. 剑指offer——11.旋转数组的最小数字

    题目: 题1:实现快速排序 题2:年龄排序问题. 题3:旋转数组的最小数字 知识点: 快速排序算法,参考:https://blog.csdn.net/shujuelin/article/details ...

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

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

  10. 剑指offer六:旋转数组的最小数字

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

最新文章

  1. Winform Textbox实现滚动条始终在最下面
  2. arduino 大气气压模块 BOSCH BMP085
  3. java parsedouble valueof_java String.valueOf() 方法的使用
  4. leetcode 剑指 Offer 03. 数组中重复的数字
  5. redis实现cache系统实践(六)
  6. 微信小程序 - 基本学习资源
  7. php %3cpre%3c pre%3e,PHP代码执行与命令注入
  8. 陕西省2021年高考成绩位次查询,2021年陕西高考个人排名怎么查询,陕西高考成绩排名查询方法...
  9. Chrome 45 减少了内存占用
  10. SWAT模型气象数据处理(一)
  11. 阿里字体图标库的使用
  12. 伦敦大学计算机研究生雅思要求,伦敦TOP10大学的雅思入学要求来了!
  13. java提现功能开发_利用java实现提现金额到支付宝账户的功能
  14. 设备报废鉴定怎么做?
  15. 和平精英清明节服务器维修时间,和平精英开服时间/和平精英几点能玩 和平精英常见问题解答汇总...
  16. 网页从输入url到呈现页面流程
  17. postman-模拟上传图片
  18. c3p0和dbcp的使用和区别
  19. 五步看平台,选好安全的MT4交易外汇平台
  20. 与网络公司合作建站流程和注意事项

热门文章

  1. python 包的使用 (三)——turtle:使用海龟图形(turtle graphics)绘制图像
  2. 对语言模型(Language Model)与n-gram的理解
  3. 关于日期 显示当前日期
  4. @Transactional注解属性(2)
  5. Leetcode134.加油站
  6. vue学习-动态组件和异步组件显示
  7. 锐捷服务器有什么型号,锐捷管理服务器RG-RCMS-16
  8. 持续输出|我的 2019 年
  9. LayaAir Sprite 容器添加子节点
  10. Android 数据存储/访问 之 SharedPreferences(偏好设定)