旋转数组的最小值

来源:互联网 发布:淘宝上买保险可靠吗 编辑:程序博客网 时间:2024/04/27 23:26

二分不止是可以查找最小值,它可以查具有顺序的特征值,当找不出特征时可以遍历

import java.util.ArrayList;public class Solution {    public int minNumberInRotateArray(int [] array) {        int left = 0, right = array.length-1;        if(array[left] < array[right]) return array[left];        int num_l = array[left];        int num_r = array[right];        int min = 2147483647;        int mid = (left+right)/2;        while (left <= right) {            mid = (left+right)/2;            min = Math.min(min, array[mid]);            if(array[mid] == num_l && array[mid] == num_r) {                for(int i = 0; i < array.length-1; ++i) {                    min = Math.min(min, array[i]);                }                return min;            } else if(array[mid] >= num_l || array[mid] >= num_r) {                left = mid + 1;            } else if(array[mid] <= num_l || array[mid] <= num_r) {                right = mid - 1;            }        }        return Math.min(min, array[mid]);    }    public static void main(String[] args) {        int[] array = new int[] {                20, 19, 18, 17, 16, 15, 14, 13,  12, 11, 10, 9, 8, 7, 6, 5, 4        };        System.out.println((new Solution()).minNumberInRotateArray(array));    }}
原创粉丝点击