题目描述

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

理解

  • 非减排序想说明什么
    这说明说明旋转前的数组是按照非减的顺序排列的
  • 引入数组的旋转是为了什么
    这说明旋转后的数组分成了两个非减排序的数组,记为array1和array2,array1中的任意元素是大于等于array2中所有数的,所以array2中的第一个数就是我们要找的旋转数组中最小的数。
  • 旋转数组的最小数字

解题思路

思路1
无非是要找出给定数组中的最小元素,不考虑什么数组旋转,直接简单粗暴解决

class Solution:def minNumberInRotateArray(self, rotateArray):min = rotateArray[0]if len(rotateArray) > 0:for i in range(1,len(rotateArray)):if rotateArray[i] < min:min = rotateArray[i]return minelse:return 0

或者

class Solution:def minNumberInRotateArray(self, rotateArray):if len(rotateArray) == 0:return 0else:return min(rotateArray)

思路2
利用二分查找法

  • 设置中间点,标记旋转数组首元素和尾元素,中间点将数组分成两半。
  • 如果中间点大于等于首元素,说明最小数字在数组后一半,如果中间点小于等于尾元素,说明最小数字在数组前一半。依次改变首尾元素的位置,当尾元素和首元素挨着的时候,这时候尾元素就是所找的最小值。有一点特殊的是,当首元素等于尾元素等于中间值时,只能对数组进行顺序查找。
class Solution:def minNumberInRotateArray(self, rotateArray):array_len = len(rotateArray)left = 0right = array_len - 1if array_len==0:return 0else:           while (right - left)> 1:mid = (left + right)//2         if rotateArray[mid] == rotateArray[left] and rotateArray[mid] == rotateArray[right]:min = rotateArray[left]for i in range(left,right):if rotateArray[i] < min:min = rotateArray[i]return min elif rotateArray[mid]>=rotateArray[left]:left = midelif rotateArray[mid]<=rotateArray[right]:right = midreturn rotateArray[right]

剑指offer_第6题_旋转数组的最小数字相关推荐

  1. 剑指offer——面试题8:旋转数组的最小数字

    剑指offer--面试题8:旋转数组的最小数字 Solution1: 自己想的复杂度为O(n)O(n)O(n)的算法,若用二分查找则: 1.代码复杂:2.最坏情况下的二分查找的时间复杂度亦为O(n)O ...

  2. 剑指offer:面试题11. 旋转数组的最小数字

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

  3. [剑指offer]面试题8:旋转数组的最小数字

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

  4. 《剑指offer》c++版本 11. 旋转数组的最小数字

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

  5. 剑指offer_第13题_调整数组顺序使奇数位于偶数前面

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序 使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分 并保证奇数和奇数,偶数和偶数之间的相对位置不变. 理解 合并两个列表 ...

  6. 牛客题霸 [ 旋转数组的最小数字] C++题解/答案

    牛客题霸 [ 旋转数组的最小数字] C++题解/答案 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. NOT ...

  7. [剑指offer]面试题第[6]题[JAVA][旋转数组的最小数字][二分法]

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

  8. 剑指offer_第14题_链表中倒数第k个结点_Python

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 理解 链表详解 python数据结构之链表 解题思路 思路1 确定链表种结点个数lenth 倒数第k个结点就是第length-k+1个结点 需要考 ...

  9. 剑指offer_第11题_二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数. 其中负数用补码表示. 理解 整数怎么转换为二进制 >>> bin(25) '0b11001' >>> bin ...

最新文章

  1. 矩阵的行列sum() Python
  2. 360前端负责人月影:赛跑项目和跳水项目的金牌含量其实一样
  3. List的Clear方法与RemoveAll方法用法小结
  4. pdfstamper生成pdf无法显示汉字_正点原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验...
  5. 求素数为什么到平方根就行了
  6. 用Python告诉你,为什么宇宙的尽头是公务员!
  7. 【办公自动化】国土“三调”用地分类“一键”转南京分类
  8. 日期操作工具2:DateUtil
  9. qt.qpa.plugin: Could not find the Qt platform plugin “xcb“ i
  10. 计算机单位-字节到底是什么?(小白简单易懂)
  11. guid分区怎么装win7_GUID分区是否可以装Win7?
  12. 华为交换机调试软件_无忌之谈华为005丨 “华为系”黄埔军校诞生记
  13. 《德米安》从那以后伤口很痛,但偶尔我会找到钥匙,沉入心底
  14. 路由巧设置 局域网轻松限制BT下载
  15. python 爬虫 短信验证码
  16. gamc网卡驱动2-----gmac收发实现
  17. 平面解析几何----余弦定理求焦点三角形的面积
  18. 【CSON原创】javascript实现3D涂鸦效果
  19. 计算机网络体系结构i层,计算机网络体系结构及协议之网际互连IBEBEE
  20. 卡尔曼滤波做轨迹预测

热门文章

  1. ubuntu下安装redis
  2. 摄像机的几个重要的技术指标
  3. Java与UML交互图
  4. 【组队学习】【28期】R语言数据科学
  5. 技术图文:如何利用BigOne的API制作自动化交易系统 -- 身份验证
  6. Matlab数据的可视化 -- 散点图
  7. MOG2 成员函数参数设定
  8. 重磅!教育部再次审批179所高校新增本科AI专业
  9. 浪潮刘军:为什么说计算力是AI时代“免费的午餐”?
  10. 触类旁通,经典面试题最长公共子序列应该这么答