题解 | 旋转数组的最小数字
旋转数组的最小数字
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
import java.util.*; public class Solution { // 时间复杂度要求O(logn),使用二分查找 // 因为数组原本是有序的,旋转之后,分为了两部分 // 前面部分一定都大于后面部分 // 这时使用二分查找,如果nums[mid]的值大于nums[right],则表示测试mid在前一部分,需要将left = mid + 1 // 如果nums[mid] < nums[right],则表示mid在后面一部分,需要将right = mid; // 如果nums[mid] == nums[right],需要不断缩小right的值,来缩小氛围 public int minNumberInRotateArray (int[] nums) { // write code here if(nums.length == 0) return 0; int left = 0, right = nums.length - 1; while(left<right){ int mid = (left + right) / 2; if(nums[mid] > nums[right]) left = mid + 1; else if(nums[mid] < nums[right]) right = mid; else right--; } return nums[left]; } }