153. Find Minimum in Rotated Sorted Array

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e.,  ​​[0,1,2,4,5,6,7]​​​ might become  ​​[4,5,6,7,0,1,2]​​).

Find the minimum element.

You may assume no duplicate exists in the array.

Example 1:

Input: [3,4,5,1,2] Output: 1

Example 2:

Input: [4,5,6,7,0,1,2] Output: 0

class Solution {
public:
int findMin(vector<int>& nums) {
int LeftIndex = 0;int RightIndex = nums.size() - 1;
while(LeftIndex < RightIndex){
int mid = (LeftIndex + RightIndex) / 2;
if(nums[mid] > nums[RightIndex]){
LeftIndex = mid +1;
}
else{
RightIndex = mid;
}
}
return nums[RightIndex];
}
};

二叉树模板:

/**查找第一个与key相等的元素的下标, 如果不存在返回-1 */
static int firstEqual(int[] arr,int key){
int L = 0, R = arr.length - 1; //在[L,R]查找第一个>=key的
int mid;
while( L <= R){
mid = L + (R - L)/2;
if(arr[mid] >= key)
R = mid - 1;
else
L = mid + 1;
}
if(L < arr.length && arr[L] == key)
return L;
return -1;
}

/**查找第一个大于等于key的元素的下标*/
static int firstLargeEqual(int[] arr,int key){
int L = 0, R = arr.length - 1;
int mid;
while( L <= R){
mid = L + (R - L) / 2;
if(arr[mid] >= key)
R = mid - 1;
else
L = mid + 1;
}
return L;
}


/**查找第一个大于key的元素的下标 */
static int firstLarge(int[] arr,int key){
int L = 0,R = arr.length - 1;
int mid;
while(L <= R){
mid = L + (R - L) / 2;
if(arr[mid] > key)
R = mid - 1;
else
L = mid + 1;
}
return L;
}


/**查找最后一个与key相等的元素的下标, 如果没有返回-1*/
static int lastEqual(int[] arr,int key){
int L = 0, R = arr.length - 1;
int mid;
while( L <= R){
mid = L + (R - L)/2;
if(arr[mid] <= key)
L = mid + 1;
else
R = mid - 1;
}
if(R >= 0 && arr[R] == key)
return R;
return -1;
}

/**查找最后一个小于等于key的元素的下标 */
static int lastSmallEqual(int[] arr,int key){
int L = 0, R = arr.length - 1;
int mid;
while( L <= R){
mid = L + (R - L) / 2;
if(arr[mid] <= key)
L = mid + 1;
else
R = mid - 1;
}
return R;
}


/**查找最后一个小于key的元素的下标*/
static int lastSmall(int[] arr,int key){
int L = 0, R = arr.length - 1;
int mid;
while(L <= R){
mid = L + (R - L) / 2;
if(arr[mid] < key)
L = mid + 1;
else
R = mid - 1;
}
return R;
}