package com.interview.books.leetcodeoj;
/**
* Created_By: stefanie
* Date: 14-12-28
* Time: 下午4:37
*/
public class LOJ154_FindMinInRotatedSortedArray {
//max element is array[i] > array[i + 1] && array[i - 1] > array[i](default); min element is array[i + 1];
//do binary search low = 0 and high = array.length - 1,
//if(array[mid] > array[mid + 1]) return array[mid + 1];
//else if(array[mid] > array[high]) breaking point in high part, so low = mid + 1;
//else breaking point in low part, so high = mid;
//if no breaking point found, the min element is array[0];
//de dup by checking array[low] == array[high], do high--;
public int findMin(int[] array) {
int low = 0;
int high = array.length - 1;
while(low < high){
while(low < high && array[low] == array[high]) high--;
if(low >= high) break;
int mid = low + (high - low)/2;
if(array[mid] > array[mid + 1]) return array[mid + 1];
else if(array[mid] > array[high]) low = mid + 1;
else high = mid;
}
return array[0];
}
}