Lc-154
154. Find Minimum in Rotated Sorted Array II
题目大意:
给定一个单调递增数组并且在某个pivot节点进行旋转
i.e.[0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]
找到在数组中最小的元素并且数组中可能有重复元素
解题思路:
根据题意,题目符合二分搜索
首先初始化两个变量low 和 high分别等于数组的起始和最后一个元素的下标
在一个while循环中,条件为low <= high
找到当下mid值下标,如果mid下标的元素小于最后一个元素,则说明最小元素
在mid左侧,所以可以使high = mid
如果当下mid下标的元素 大于 最后一个元素, 则说明最小元素在mid下标的
右侧, 所以low = mid+1
如果上述两种情况都不满足, 则high--
当low > high,结束while循环, 返回nums[low].
注意:
None
复杂度:
Time Coplexity: O(logN)
Space Complexity: O(1)
Code示例:
class Solution {
public int findMin(int[] nums) {
int low = 0, high = nums.length-1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (nums[mid] < nums[high]) high = mid;
else if (nums[mid] > nums[high]) low = mid+1;
else high--;
}
return nums[low];
}
}