剑指offer——06旋转数组的最小数字(Python3)
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
知识点:查找(二分查找)
思路:
题上说明数组是一个旋转的非减排序数组,即1:参数数组为一个有序非递减数组;2.数组旋转后分为两部分,即原始位置和旋转位置。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,则{3,4,5}为原始数组,{1,2}为旋转数组。我们可以利用二分查找,设置两个指针来查找原始数组的尾部和旋转数组的头部,进而判定最小位置。
如果中间位置位于原始数组,那么它应该大于等于头指针,此时数组中最小的元素应该位于该中间元素的后面;如果中间元素位于后面的旋转数组,那么它应该小于等于尾指针,此时该数组的最小元素应该位于该中间元素的前面。
最终头指针会指向原始数组的尾部,尾指针会指向旋转数组的头部。
如果遇到头指针、尾指针和中间元素相等的情况,即{1,0,1,1,1},无法判断,只能利用顺序查找方法。
代码:
class Solution: def minNumberInRotateArray(self, rotateArray): ''' :param rotateArray: 输入的旋转数组 :return: 数组中的最小值 ''' # write code here #设置两个指针,指向数组下标 index_1 = 0#设置头指针 index_2 = len(rotateArray) - 1#设置尾指针 min = index_1 #尾指针始终指向后面的递增数组,头指针始终指向前面的递增数组 #最终头指针指向前面数组的最后一个元素,尾指针指向后面数组的最后一个元素 while rotateArray[index_1] >= rotateArray[index_2]:#当头指针超过尾指针时,跳出循环 if index_2 - index_1 ==1:#判断输出条件 min = index_2 break min = int((index_1+index_2)/2)#找出中间元素 #无法判断位置时,(当头指针、尾指针和中间相同时)采用顺序查找 if rotateArray[index_1] ==rotateArray[index_2] and rotateArray[index_1]==rotateArray[min]: for i in range(index_1, index_2 + 1): if rotateArray[i] < rotateArray[min]: min = i return rotateArray[min] #开始使用二分查找 if rotateArray[index1] <= rotateArray[min]: index1 = min elif rotateArray[min] <= rotateArray[index2]: index2 = min return rotateArray[min]
转载于:https://www.cnblogs.com/wobushangwangl/p/10920052.html
剑指offer——06旋转数组的最小数字(Python3)相关推荐
- 剑指Offer #06 旋转数组的最小数字(二分查找)| 图文详解
题目来源:牛客网-剑指Offer专题 题目地址:旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小 ...
- 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java
<LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...
- 剑指 Offer 11. 旋转数组的最小数字 简单
剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...
- 剑指offer 11. 旋转数组的最小数字(很详细!)
剑指offer 11. 旋转数组的最小数字 题目 解题思路 代码 题目 解题思路 一开始,我们就能直接想到,数组找最小值,那么不轻轻松松直接遍历一遍,用一个变量记录最小值,然后直接返回不就完事了? 但 ...
- 【LeetCode】剑指 Offer 11. 旋转数组的最小数字
[LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...
- 【剑指 Offe】剑指 Offer 11. 旋转数组的最小数字
目录标题 算法汇总 题目 关键点 代码 1.解体方法 - 二分法 思路 代码 时间和空间复杂度 2.解题方法,如暴力法 思路 代码 时间和空间复杂度 算法汇总 以下是所有算法汇总,包括GitHub源码 ...
- 剑指offer——11.旋转数组的最小数字
题目: 题1:实现快速排序 题2:年龄排序问题. 题3:旋转数组的最小数字 知识点: 快速排序算法,参考:https://blog.csdn.net/shujuelin/article/details ...
- 剑指offer:旋转数组的最小数字
题目 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的 ...
- 剑指offer六:旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
最新文章
- Oracle 11gR2构建RAC之(3)--安装grid前环境检测
- Endnote X9安装教程
- pycharm安装lxml
- Jmeter之Bean shell使用(二)
- HDU - 5878 A - I Count Two Three H 技巧枚举
- call and apply
- 脚本加密http://www.datsi.fi.upm.es/~frosal/sources/
- Rsync服务配置详解,实现服务器间数据同步!
- ubuntu16.04之升级python3.5到3.6
- 零基础学python大概要多久-零基础自学python要多久?
- Linux wpa_cli 调试方法
- EXT3-fs error和EXT4-fs error小总结
- 2022-2027年中国暖气片行业市场全景评估及发展战略规划报告
- 根据结束时间和开始时间计算天数
- 【线程池封装】实现简单回射服务器
- ssm+JSP计算机毕业设计英雄联盟赛事新闻管理系统qeg6l【源码、程序、数据库、部署】
- 企业申请E-mark认证要检测些什么?
- 安卓配置正式包和测试包不同的名字、图标、同时安装,(极光配置测试和正式)
- GIS应用技巧之创建渔网
- 分享面经与面试资料-四面阿里终于如愿拿到P7级offer【Java岗】
热门文章
- python【力扣LeetCode算法题库】10-正则表达式匹配
- 求链式线性表的倒数第K项(堆栈解法)
- 用户计算机通过连入局域网上网时,重庆市职称计算机考试理论题库05
- vue打包后element-icon不显示问题解决
- Redis整合Spring Data Redis 开发key和value乱码
- 网站优化四大优势必须了解
- 网站优化离不开内容更新
- 新晋小白怎样才能做好seo优化
- 搭建网络及服务器系统,网络服务器搭建与管理
- python wait之后怎么起起来_python wait方法_Python条件类| 带有示例的wait()方法