题解 | #旋转数组的最小数字#
旋转数组的最小数字
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int minNumberInRotateArray (int[] nums) {
// write code here 使用二分法,分别求两边的最小值
// 特殊情况判断
if (nums.length== 0) {
return 0;
}
// 左右指针i j
int i = 0, j = nums.length - 1;
// 循环
while (i < j) {
// 找到数组的中点 m
int m = (i + j) / 2;
// m在左排序数组中,旋转点在 [m+1, j] 中
if (nums[m] > nums[j]) i = m + 1;
// m 在右排序数组中,旋转点在 [i, m]中
else if (nums[m] < nums[j]) j = m;
// 缩小范围继续判断,这里是重点!!!!判断不出来的时候,缩小范围
else j--;
}
// 返回旋转点
return nums[i];
}
}

