剑指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]
剑指offer——06旋转数组的最小数字(Python3)的更多相关文章
- 剑指Offer:旋转数组的最小数字【11】
剑指Offer:旋转数组的最小数字[11] 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4 ...
- ⛅剑指 Offer 11. 旋转数组的最小数字
20207.22 LeetCode 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小 ...
- [剑指 Offer 11. 旋转数组的最小数字]
[剑指 Offer 11. 旋转数组的最小数字] 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5, ...
- 【Java】 剑指offer(10) 旋转数组的最小数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. ...
- Go语言实现:【剑指offer】旋转数组的最小数字
该题目来源于牛客网<剑指offer>专题. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3, ...
- 剑指OFFER之旋转数组的最小数字(九度OJ1386)
题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...
- 剑指Offer 6. 旋转数组的最小数字 (数组)
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
- 《剑指offer》-旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数 ...
- 剑指offer例题——旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转, ...
随机推荐
- 如何运用docker配合python开发
在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ...
- js两个页面之间URL传递参数中文乱码
- 实现model中的文件上传FTP(二)
上一篇博客记录了如何将model中的图片存入FTP,通过一个第三方的storages简单的实现了,但是后续我发现如果想在浏览器通过url直接获取图片,就不太容易了(大神轻喷,小弟自学django和py ...
- Struts2框架学习(一)——Struts2的概念及搭建
一.Struts2的概念 使用优势:1)自动封装参数 2)参数校验 3)结果的处理(转发|重定向) 4)国际化 5)显示等待页面 6)防止表单重复提交 Struts2具有更加先进的架构以及思想 Str ...
- vue-cli 2.0 常用命令
一.查询npm版本 npm -v 二.安装npm npm install npm g 三.安装webpack npm install webpack -g 四.安装vue命令行工具 npm insta ...
- sqoop从DB2迁移数据到HDFS
Sqoop import job failed to read data from DB2 database which has UTF8 encoding. Essentially, even th ...
- FBX骨骼坐标系与模型坐标系的关系
采用assimp加载FBX文件.首先记录下ubuntu下assimp的编译安装. cd assimp_unzip_dir mkdir build cd build && cmake . ...
- php常用方法一
1.用户名用***替换 /** * 用户名中间用***替换 * @param string $str 需要替换的字符串 * @param int $len 需要替换的位数 * @param strin ...
- sql_1
order by SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC; SELECT Company, OrderNumber ...
- FFmpeg avcodec_send_packet压缩包函数
首先看一下FFmpeg关于该packet函数的注释: int avcodec_send_packet ( AVCodecContext * avctx, const AVPacket * ...