Good Luck !
//(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
//You are given a target value to search. If found in the array return its index, otherwise return -1.
//Duplicate Allowed!
public class Solution {
public int search(int[] nums, int target) {
int l = 0;
int r = nums.length - 1;
while(l <= r){
int m = (l+r)/2;
if(nums[m] == target)
return m;
if(nums[m] > nums[r]){
if(nums[l] <= target && target < nums[m]){
r = m - 1;
}else{
l = m + 1;
}
}else if(nums[m] < nums[r]){
if(nums[m] < target && target <= nums[r]){
l = m + 1;
}else{
r = m - 1;
}
}else{
r -- ;
}
}
return -1;
}
}
//Find the minimum element.
//Duplicate Allowed
public class Solution {
public int findMin(int[] nums) {
public int findMin(int[] nums) {
if(nums[0] < nums[nums.length-1])
return nums[0];
int r = nums.length-1;
int l = 0;
int MIN = nums[0];
while(l <= r){
int m = (l+r)/2;
MIN = Math.min(MIN,nums[m]);
if(nums[m] > nums[r]){
l = m + 1;
}else if(nums[m] < nums[r]){
r = m - 1;
}else{
r -- ;
}
}
return MIN;
}
}
}