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

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

从自己的博客转载。
题目来源leetcode153 和leetcode154 要求在排序的旋转数组中寻找最小值。最小值可以很简单的遍历一次数组得到,时间复杂度为 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[q],此时最小元素在m与q之间,将p移动到m,原来规模为n的问题变成规模为 q − m = n 2 q-m=\frac{n}{2} qm=2n的子问题。如果中间元素位于第二个递增数组R,则有关系:A[p]>A[m],A[m] 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] [

你可能感兴趣的:(题解,leetcode,分治,二分查找)