剑指offer_第6题_旋转数组的最小数字
题目描述
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为
数组的旋转
。 - 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。
- 例如数组{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题_旋转数组的最小数字相关推荐
- 剑指offer——面试题8:旋转数组的最小数字
剑指offer--面试题8:旋转数组的最小数字 Solution1: 自己想的复杂度为O(n)O(n)O(n)的算法,若用二分查找则: 1.代码复杂:2.最坏情况下的二分查找的时间复杂度亦为O(n)O ...
- 剑指offer:面试题11. 旋转数组的最小数字
题目:旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2, ...
- [剑指offer]面试题8:旋转数组的最小数字
面试题8:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2 ...
- 《剑指offer》c++版本 11. 旋转数组的最小数字
如题: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
- 剑指offer_第13题_调整数组顺序使奇数位于偶数前面
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序 使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分 并保证奇数和奇数,偶数和偶数之间的相对位置不变. 理解 合并两个列表 ...
- 牛客题霸 [ 旋转数组的最小数字] C++题解/答案
牛客题霸 [ 旋转数组的最小数字] C++题解/答案 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. NOT ...
- [剑指offer]面试题第[6]题[JAVA][旋转数组的最小数字][二分法]
####[问题描述] 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5 ...
- 剑指offer_第14题_链表中倒数第k个结点_Python
题目描述 输入一个链表,输出该链表中倒数第k个结点. 理解 链表详解 python数据结构之链表 解题思路 思路1 确定链表种结点个数lenth 倒数第k个结点就是第length-k+1个结点 需要考 ...
- 剑指offer_第11题_二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数. 其中负数用补码表示. 理解 整数怎么转换为二进制 >>> bin(25) '0b11001' >>> bin ...
最新文章
- 矩阵的行列sum() Python
- 360前端负责人月影:赛跑项目和跳水项目的金牌含量其实一样
- List的Clear方法与RemoveAll方法用法小结
- pdfstamper生成pdf无法显示汉字_正点原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验...
- 求素数为什么到平方根就行了
- 用Python告诉你,为什么宇宙的尽头是公务员!
- 【办公自动化】国土“三调”用地分类“一键”转南京分类
- 日期操作工具2:DateUtil
- qt.qpa.plugin: Could not find the Qt platform plugin “xcb“ i
- 计算机单位-字节到底是什么?(小白简单易懂)
- guid分区怎么装win7_GUID分区是否可以装Win7?
- 华为交换机调试软件_无忌之谈华为005丨 “华为系”黄埔军校诞生记
- 《德米安》从那以后伤口很痛,但偶尔我会找到钥匙,沉入心底
- 路由巧设置 局域网轻松限制BT下载
- python 爬虫 短信验证码
- gamc网卡驱动2-----gmac收发实现
- 平面解析几何----余弦定理求焦点三角形的面积
- 【CSON原创】javascript实现3D涂鸦效果
- 计算机网络体系结构i层,计算机网络体系结构及协议之网际互连IBEBEE
- 卡尔曼滤波做轨迹预测