[LeetCode]154. 寻找旋转排序数组中的最小值 II(java实现)
1. 题目
2. 读题(需要重点注意的东西)
思路(二分):
删除末尾的与第一个节点相同的数,去掉首尾的重复,然后按[LeetCode]153. 寻找旋转排序数组中的最小值(java实现)二分进行二分即可。
3. 解法
---------------------------------------------------解法---------------------------------------------------
class Solution {
public int findMin(int[] nums) {
int n = nums.length;
int l = 0,r = n - 1;
// 删除末尾与nums[0]相同的数
while(l < r && nums[r] == nums[0]) r--;
// 单调的情况
if(nums[l] < nums[r]) return nums[l];
// 二分
while(l < r){
int mid = l + r >> 1;
if(nums[mid] < nums[0]) r = mid;
else l = mid + 1;
}
return nums[l];
}
}
可能存在的问题:
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
6. 总结
掌握好二分的两个模板
!详见 4. 可能有帮助的前置习题