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 }