==========================努力奋斗财源广进==========================
有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。
import java.util.*;
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
//此题做过,不算很难,需要理清脉络,中间元素到底和谁比较的问题。
int len = array.length;
if(len == 0) return 0;
int left = 0;
int right = len - 1;
while(left < right){
int mid = (left + right)/2;
if(array[mid] < array[right]){
right = mid;
} else if(array[mid] > array[right]){
left = mid + 1;
} else if(array[mid] == array[right]){
right--;
}
}
return array[left];
}
}
//待定
此题解使用到二分法,就需要了解旋转数组的特点。取中间值和最后一个值进行对比。根据比对的结果来进行判断。
旋转数组相当于两个升序的数组拼接在一块。根据中间的值和最后元素的对比来判断最小值在前还是后。
比如说中间的元素如果大于最后一个元素了,可以判定最小值在右边。
如果说中间元素小于最后一个元素,可以判定最小值在左边。
如果相等的话,就让去掉最后一个元素再进行比较。
评论区记录复习记录
评论