Problem: 153. 寻找旋转排序数组中的最小值
题目描述
思路
1.初始化左右指针left和right,指向数组的头和尾;
2.开始二分查找:2.1.定义退出条件:当left == right时退出循环;
2.2.当nums[mid] < nums[right]时使得right = mid(由于每一个小的子数组部分也是升序的则说明当前位于最小值的右侧)
2.3.当nums[mid] > nums[right]时,使得right = mid + 1(同理说明当前位于最小值的左侧)
2.4.由于数组不存在重复的数字所以也不存在**nums[mid] == nums[right]**的情况
复杂度
时间复杂度:
O ( l o g n ) O(logn) O(logn)
空间复杂度:
O ( 1 ) O(1) O(1)
Code
class Solution {
/**
* Find the minimum value in the rotationally sorted array
*
* @param nums Rotationally sorted array
* @return int
*/
public int findMin(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] < nums[right]) {
right = mid;
} else {
left = mid + 1;
}
}
return nums[left];
}
}