leetcode153 154. Find Minimum in Rotated Sorted Array I/II

leetcode153 154. Find Minimum in Rotated Sorted Array I/II

从自己的博客转载。
题目来源leetcode153leetcode154 要求在排序的旋转数组中寻找最小值。最小值可以很简单的遍历一次数组得到,时间复杂度为 O ( n ) O(n) O(n)但是没有用到题目给的性质,所以会超时。

解题思路

leetcode153 无重复元素

先分析leetcode153中没有重复值的情况,采用二分查找的思路,设输入的数组长度为n表示为 A [ n ] A[n] A[n],经过观察可以发现pivot将A划分成了两个递增子数组L,R。使用指针p指向A的第一个元素A[0],指针q指向A的最后一个元素 A [ n − 1 ] A[n-1] A[n1],使用指针m指向A的中间元素 A [ n 2 ] A[\frac{n}{2}] A[2n]。如果中间元素位于第一个递增数组L,则有关系:A[p]<A[m],A[m]>A[q],此时最小元素在m与q之间,将p移动到m,原来规模为n的问题变成规模为 q − m = n 2 q-m=\frac{n}{2} qm=2n的子问题。如果中间元素位于第二个递增数组R,则有关系:A[p]>A[m],A[m]<A[q],此时最小元素在p与m之间,将q移动到m,原来规模为n的问题变成规模为 m − p = n 2 m-p=\frac{n}{2} mp=2n的子问题。直到最后q=p+1时,问题规模下降到2的情况,得到答案最小的元素为q指针指向的元素。可以看到每一次迭代,都会将n规模的问题下降到 n 2 \frac{n}{2} 2n规模。

leetcode154 有重复元素

在有重复值的情况下,会出现 A [ m ] = = A [ p ] A[m]==A[p] A[m]==A[p]的情况,这个时候是无法判断到底左右两边谁为递增序列。如
[ 2 , 2 , 2 , 2 , 1 , 1 , 1 , 2 ] [2, 2, 2, 2, 1,1,1, 2]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值