剑指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}的一个旋转, ...
随机推荐
- 等等空格用法
平时经常用到 空格转移字符,记住一个 表示一个字符就可以了. Non-Breaking SPace 记住它是什么的缩写,更有助于我们记忆和使用.下面的字符转义自己视图翻译一下. 记录一下,空格的转 ...
- python3遍历选中文件夹下的文件【GUI编程】
功能介绍 如标题 使用截图 1.第一步:运行python程序 2.第二步:点击按钮选中文件夹 3.运行结束: 1. 显示选中文件夹路径 2. 遍历打印文件夹内文件 代码 import os #程序功能 ...
- 机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码)
背景 最近互联网上出现一个热词就是“freestyle”,源于一个比拼rap的综艺节目.在节目中需要大量考验选手的freestyle能力,freestyle指的是rapper即兴的根据一段主题讲一串r ...
- CodeIgniter + smarty 实现widget功能
在开发过程中,经常需要widget功能,一可以隔离页面逻辑,二可以重用代码.结合smarty的plugin功能,可以方便的实现该功能. 譬如,我们的页面中可以这样写: {{extends file=' ...
- TortoiseSvn问题研究(一)
问题描述 今天在工作中遇到一个SVN方面的问题,牵扯出使用SVN这一段时间的一系列问题. 具体来说,是这样的: 上周五有上线分支,自己的分支需要merge: 很多项目小组都在开发这个项目,再往前好像也 ...
- httpclient模拟浏览器
package com.java.httpclient; import java.io.IOException; import org.apache.http.HttpEntity; import o ...
- 仅前端cookie之记住密码
参考文章给忘了...,我就在他基础上修改了一些,但至于安全性,我没弄md5,所以安全系数应该为0 <!DOCTYPE html> <html lang="en"& ...
- 普通平衡树 Splay
Code: #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ...
- 前端开发—BOM对象DOM文档对象操作
BOM 浏览器对象 BOM:Browser Object Model 操作浏览器,需要调用window对象,它是所有浏览器都支持的对象,表示的就是浏览器窗口 window对象可以通过点调用子对象 wi ...
- js中标签字符串的拼接
//1.用单双引号拼接 var valueDemo = "111"; var htmlStrs1 = '<option selected="selected&quo ...