题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{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)相关推荐

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

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

  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. 【剑指 Offe】剑指 Offer 11. 旋转数组的最小数字

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

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

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

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

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

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

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

最新文章

  1. Oracle 11gR2构建RAC之(3)--安装grid前环境检测
  2. Endnote X9安装教程
  3. pycharm安装lxml
  4. Jmeter之Bean shell使用(二)
  5. HDU - 5878 A - I Count Two Three H 技巧枚举
  6. call and apply
  7. 脚本加密http://www.datsi.fi.upm.es/~frosal/sources/
  8. Rsync服务配置详解,实现服务器间数据同步!
  9. ubuntu16.04之升级python3.5到3.6
  10. 零基础学python大概要多久-零基础自学python要多久?
  11. Linux wpa_cli 调试方法
  12. EXT3-fs error和EXT4-fs error小总结
  13. 2022-2027年中国暖气片行业市场全景评估及发展战略规划报告
  14. 根据结束时间和开始时间计算天数
  15. 【线程池封装】实现简单回射服务器
  16. ssm+JSP计算机毕业设计英雄联盟赛事新闻管理系统qeg6l【源码、程序、数据库、部署】
  17. 企业申请E-mark认证要检测些什么?
  18. 安卓配置正式包和测试包不同的名字、图标、同时安装,(极光配置测试和正式)
  19. GIS应用技巧之创建渔网
  20. 分享面经与面试资料-四面阿里终于如愿拿到P7级offer【Java岗】

热门文章

  1. python【力扣LeetCode算法题库】10-正则表达式匹配
  2. 求链式线性表的倒数第K项(堆栈解法)
  3. 用户计算机通过连入局域网上网时,重庆市职称计算机考试理论题库05
  4. vue打包后element-icon不显示问题解决
  5. Redis整合Spring Data Redis 开发key和value乱码
  6. 网站优化四大优势必须了解
  7. 网站优化离不开内容更新
  8. 新晋小白怎样才能做好seo优化
  9. 搭建网络及服务器系统,网络服务器搭建与管理
  10. python wait之后怎么起起来_python wait方法_Python条件类| 带有示例的wait()方法