/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
// your code goes here
}
}
class Solution {
public int search(int[] nums, int target) {
int low = 0;
int high = nums.length - 1;
if(nums.length == 2){
if(nums[0] == target)
return 0;
if(nums[1] == target)
return 1;
return -1;
}
while(low<=high){
int mid = (low+high)/2;
if(nums[mid] == target){
return mid;
}
else if(nums[mid] >= nums[low]){
//it means thet the whole area of low till mid is sorted
if(nums[mid]>target && nums[low] <= target){
//that is target lies between
high = mid - 1;
}else{
low = mid +1;
}
}else{
//it means that we are in the second half of the array that is unrotated part
//like 7 8 9 10 1 2 3 4 5 6 and we are at 2
if(nums[high]>=target && nums[mid]<target){
//answer lies in this interval
low = mid + 1;
}else{
high = mid - 1;
}
}
}
return -1;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCX0KfQoKY2xhc3MgU29sdXRpb24gewogICAgcHVibGljIGludCBzZWFyY2goaW50W10gbnVtcywgaW50IHRhcmdldCkgewogICAgICAgIGludCBsb3cgPSAwOwogICAgICAgIGludCBoaWdoID0gbnVtcy5sZW5ndGggLSAxOwoKICAgICAgICBpZihudW1zLmxlbmd0aCA9PSAyKXsKICAgICAgICAgICAgaWYobnVtc1swXSA9PSB0YXJnZXQpCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgaWYobnVtc1sxXSA9PSB0YXJnZXQpCiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gICAKICAgICAgICB3aGlsZShsb3c8PWhpZ2gpewogICAgICAgICAgICBpbnQgbWlkID0gKGxvdytoaWdoKS8yOwogICAgICAgICAgICBpZihudW1zW21pZF0gPT0gdGFyZ2V0KXsKICAgICAgICAgICAgICAgIHJldHVybiBtaWQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZihudW1zW21pZF0gPj0gbnVtc1tsb3ddKXsKICAgICAgICAgICAgICAgIC8vaXQgbWVhbnMgdGhldCB0aGUgd2hvbGUgYXJlYSBvZiBsb3cgdGlsbCBtaWQgaXMgc29ydGVkCiAgICAgICAgICAgICAgICBpZihudW1zW21pZF0+dGFyZ2V0ICYmIG51bXNbbG93XSA8PSB0YXJnZXQpewogICAgICAgICAgICAgICAgICAgIC8vdGhhdCBpcyB0YXJnZXQgbGllcyBiZXR3ZWVuCiAgICAgICAgICAgICAgICAgICAgaGlnaCAgPSBtaWQgLSAxOyAKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgIGxvdyA9IG1pZCAgKzE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIC8vaXQgbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBhcnJheSB0aGF0IGlzIHVucm90YXRlZCBwYXJ0CiAgICAgICAgICAgICAgICAvL2xpa2UgNyA4IDkgMTAgMSAyIDMgNCA1IDYgIGFuZCB3ZSBhcmUgYXQgMgogICAgICAgICAgICAgICAgaWYobnVtc1toaWdoXT49dGFyZ2V0ICYmIG51bXNbbWlkXTx0YXJnZXQpewogICAgICAgICAgICAgICAgICAgIC8vYW5zd2VyIGxpZXMgaW4gdGhpcyBpbnRlcnZhbAogICAgICAgICAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICBoaWdoID0gbWlkIC0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CgogICAgfQp9