题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
解题思路
- 死方法,一次遍历,找到最小的并且返回
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
if len(rotateArray) == 0:
return 0
for i in range(len(rotateArray)):
if rotateArray[i+1] < rotateArray[i]:
return rotateArray[i+1]
- 二分查找
leetcode中有同款,分别使用两个指针 left(l) 和 right(r) 指向数组的首位,mid指向l和r的中间位
用中间值和左右位进行比较,看处于递增还是递减序列,进行操作缩小范围。
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
l, r = 0, len(rotateArray)-1
mid = 0
while(l<r):
if rotateArray[l] < rotateArray[r]:
return rotateArray[l]
mid = l + (r-l)/2 # 寻找left和right的中间值
if rotateArray[mid] > rotateArray[l]:
l = mid + 1
elif rotateArray[mid] < rotateArray[r]:
r = mid
else:
l += 1
return rotateArray[l]
本文介绍了一种在旋转数组中查找最小元素的高效算法。通过一次遍历或使用二分查找的方法,可以在O(n)或O(log n)的时间复杂度内解决问题。适用于非递减排列的旋转数组,如{3,4,5,1,2}
952

被折叠的 条评论
为什么被折叠?



