剑指offer 面试题8 旋转数组的最小值 java版答案

来源:互联网 发布:淘宝找优惠券怎么赚钱 编辑:程序博客网 时间:2024/05/18 01:07
package OfferAnswer;/** * 面试题8 * 旋转数组的最小值 * @author lwk * 时间复杂度O(logn) */public class Answer08 {     public static void main(String[] args) {int[]array={3,4,5,1,2};        System.out.println(findMin(array));}public static int findMin(int[] array){if(array == null || array.length == 0){System.out.println("输入的数组不合法");return -1;}//特殊情况一:未旋转 如{1,2,3,4,5}if(array[0] < array[array.length-1]){return array[0];}//特殊情况二:如{1,0,1,1,1} 前后两个元素中间元素均相等if(array[0] == array[array.length-1] && array[0] == array[(array.length-1)/2]){return orderFindMin(array);}    //一般情况,第一个元素大于等于最后一个元素int first = 0;int last = array.length - 1;//当last与first相差为1时,last指向的值即为最小值while(last - first != 1){int mid = (first + last)/2;if(array[mid] >= array[first]){first = mid;}if(array[mid] <= array[last]){last = mid;}}return array[last];}public static int orderFindMin(int[] array){//先假设第一个元素为最小值int min = array[0];for (int i = 1; i < array.length; i++) {if(array[i] < min){min = array[i];}}return min;}}

0 0
原创粉丝点击