题解 | #旋转数组的最小数字#
旋转数组的最小数字
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
这里是我自己画的,最直观的图片了,经过旋转后,数据是分层的,通过分层的数据,确实可以快速定位到,最小值的位置。
nums[mid] < nums[high] nums[mid] > nums[high] nums[mid] < nums[high]
最小值在中间 最小值在右间 最小值在左间
解题思路:
从上面可以看到,因为旋转后的数据,依旧是分层的,还是可以快速判断,最小值在那一边。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int minNumberInRotateArray (int[] nums) {
int low = 0;
int high = nums.length -1;
while(low <= high) {
int mid = low + (high - low) /2;
// 不好确认在左右,所以排除掉最后面的一个,再一个个试
if(nums[mid] == nums[high]) {
high = high - 1;
}
// 说明最小数在右边
else if(nums[mid] > nums[high]) {
low = mid + 1;
}
// 说明最小数在左边
else {
high = mid;
}
}
return nums[low];
}
}
当数据是【6,4】的时候
第一次循环 | 第二次循环 | |
mid | 0 | 因为low==high退出循环了,所以最终low=1 |
low | 1 | |
high | 1 |
所以最终的low的值是1
当数据是【1,0,1,1】
第一次循环 | 第二次循环 | 第三次循环 | |
mid | 1 | 0 | 因为low==high退出循环,所以最终low=1 |
low | 0 | 1 | |
high | 1 | 1 |
OPPO公司福利 1210人发布