LeetCode每日一题,154. 寻找旋转排序数组中的最小值II
先看题目描述
算法和思路
二分查找
这题使用二分查找即可,虽然说二分查找只可以用于有序数组,但这题的数组是有序数组经旋转形成的,仅有局部的有序性,还是可以利用该数组的性质使用二分查找
在二分查找的每一步中,l 为左边界, r 为右边界,mid 为查找区间的中点,最小值在该区间内
我们每次比较 nums[mid] 与 nums[r] 的大小:
- 若 nums[mid] < nums[r],则说明最小值在左半部分中,可以忽略右半部分,令 r = mid
- 若 nums[mid] > nums[r],则说明最小值在右半部分中,可以忽略左半部分,令 l = mid + 1
- 否则,此时无法判断最小值在左半部分还是右半部分中,仅知道 nums[mid] 与 nums[r] 相等,缩小区间,令 r - 1
最后查找结束时返回 nums[l] 即可
算法源码
二分查找
1 | class Solution { |