【题目描述】
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Find the minimum element.
Notice
The array may contain duplicates.
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7可能变成是4 5 6 7 0 1 2)。
你需要找到其中最小的元素。
【注】:数组中可能存在重复的元素。
【题目链接】
www.lintcode.com/en/problem/find-minimum-in-rotated-sorted-array-ii/
【题目解析】
此题可使用二分法。
与Find Minimum in Rotated Sorted Array对照看,
一共有两处修改。
1、在无重复元素时,首尾元素相等代表指向同一个位置,因此程序直接返回即可。
然而当存在重复元素时,该条件并不能表示指向同一个位置,因此
nums[low] > nums[high] 改为 nums[low] >= nums[high]
2、在无重复元素时,中间元素与首元素相等,表示一共只有两个元素,low与high各指向一个。
由于while循环中限制的大小关系,因此返回nums[high]即为最小值。
然而当存在重复元素时,该条件并不能表示一共只有low和high指向的两个元素,
而是说明low指向的元素重复了,因此删除其一,low ++即可。
【参考答案】
www.jiuzhang.com/solutions/find-minimum-in-rotated-sorted-array-ii/
Lintcode160 Find Minimum in Rotated Sorted Array II solution 题解
最新推荐文章于 2021-05-04 23:22:33 发布