1 package leetcode; 2 /* * 3 * 注意问题: 4 * 1. 原序列升序、降序问题,两种情况都要考虑 5 * 2. 边界问题,如果只有两个元素时要单独考虑,在num[mid]==num[left]判断中考虑 6 * 3. 采用2叉查找的思想 7 * */ 8 public class findMinInRotatedSortedArray { 9 public int findMin(int[] num) 10 { 11 12 int left=0; 13 int right=num.length-1; 14 if(num[left]>num[right])//原序列是升序排列 15 { 16 while(left < right) 17 { 18 int mid=(left+right)/2; 19 if(num[mid]==num[left]) 20 left=mid+1; 21 else if(num[mid]>num[left]) 22 left=mid; 23 else 24 right=mid; 25 26 } 27 } 28 else //原序列是降序排列 29 { 30 while(left < right) 31 { 32 int mid=(left+right)/2; 33 if(num[mid]==num[left]) 34 right=mid-1; 35 else if(num[mid]>=num[left]) 36 right=mid; 37 else 38 left=mid; 39 } 40 } 41 return num[left]; 42 } 43 public static void main(String[] args) 44 { 45 int[] arr=new int[3]; 46 arr[0]=3; 47 arr[1]=1; 48 arr[2]=2; 49 findMinInRotatedSortedArray a=new findMinInRotatedSortedArray(); 50 System.out.println(a.findMin(arr)); 51 } 52 }