/* 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
}
public void findInRotatedSortedArray(int[] arr, int target) {
int n = arr.length;
int low
= 0, high
= n
- 1, maxVal
= Integer.
MIN_VALUE, maxIdx
= -1, minVal
= Integer.
MAX_VALUE, minIdx
= -1;
//to check if the array is already sorted
if (arr[low] < arr[high]) {
binarySearch(0, n - 1, arr, target);
}
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] > arr[n - 1]) {
//value is on the left side
//now to find if that value is max value in arr
if (mid > 0 && mid < n - 1) {
if (arr[mid] > arr[mid - 1] && arr[mid] > arr[mid + 1]) {
maxVal = arr[mid];
maxIdx = mid;
minVal = arr[mid + 1];
minIdx = mid + 1;
} else {
low += mid + 1;
}
}
} else {
if (mid > 0 && mid < n - 1) {
//to find the min value in arr
if (arr[mid] < arr[mid - 1] && arr[mid] < arr[mid + 1]) {
minVal = arr[mid];
minIdx = mid;
maxVal = arr[mid - 1];
maxIdx = mid - 1;
} else {
high = mid - 1;
}
}
}
}
if (target > minVal && target > arr[n - 1]) {
binarySearch(0, maxIdx, arr, target);
} else {
binarySearch(minIdx, n - 1, arr, target);
}
}
private void binarySearch(int low, int high, int[] arr, int target) {
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCX0KCQoJcHVibGljIHZvaWQgZmluZEluUm90YXRlZFNvcnRlZEFycmF5KGludFtdIGFyciwgaW50IHRhcmdldCkgewogICAgICAgIGludCBuID0gYXJyLmxlbmd0aDsKICAgICAgICBpbnQgbG93ID0gMCwgaGlnaCA9IG4gLSAxLCBtYXhWYWwgPSBJbnRlZ2VyLk1JTl9WQUxVRSwgbWF4SWR4ID0gLTEsIG1pblZhbCA9IEludGVnZXIuTUFYX1ZBTFVFLCBtaW5JZHggPSAtMTsKCiAgICAgICAgLy90byBjaGVjayBpZiB0aGUgYXJyYXkgaXMgYWxyZWFkeSBzb3J0ZWQKICAgICAgICBpZiAoYXJyW2xvd10gPCBhcnJbaGlnaF0pIHsKICAgICAgICAgICAgYmluYXJ5U2VhcmNoKDAsIG4gLSAxLCBhcnIsIHRhcmdldCk7CiAgICAgICAgfQoKICAgICAgICB3aGlsZSAobG93IDw9IGhpZ2gpIHsKICAgICAgICAgICAgaW50IG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7CgogICAgICAgICAgICBpZiAoYXJyW21pZF0gPiBhcnJbbiAtIDFdKSB7CiAgICAgICAgICAgICAgICAvL3ZhbHVlIGlzIG9uIHRoZSBsZWZ0IHNpZGUKICAgICAgICAgICAgICAgIC8vbm93IHRvIGZpbmQgaWYgdGhhdCB2YWx1ZSBpcyBtYXggdmFsdWUgaW4gYXJyCgogICAgICAgICAgICAgICAgaWYgKG1pZCA+IDAgJiYgbWlkIDwgbiAtIDEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYXJyW21pZF0gPiBhcnJbbWlkIC0gMV0gJiYgYXJyW21pZF0gPiBhcnJbbWlkICsgMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsID0gYXJyW21pZF07CiAgICAgICAgICAgICAgICAgICAgICAgIG1heElkeCA9IG1pZDsKICAgICAgICAgICAgICAgICAgICAgICAgbWluVmFsID0gYXJyW21pZCArIDFdOwogICAgICAgICAgICAgICAgICAgICAgICBtaW5JZHggPSBtaWQgKyAxOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvdyArPSBtaWQgKyAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChtaWQgPiAwICYmIG1pZCA8IG4gLSAxKSB7CgogICAgICAgICAgICAgICAgICAgIC8vdG8gZmluZCB0aGUgbWluIHZhbHVlIGluIGFycgogICAgICAgICAgICAgICAgICAgIGlmIChhcnJbbWlkXSA8IGFyclttaWQgLSAxXSAmJiBhcnJbbWlkXSA8IGFyclttaWQgKyAxXSkgewogICAgICAgICAgICAgICAgICAgICAgICBtaW5WYWwgPSBhcnJbbWlkXTsKICAgICAgICAgICAgICAgICAgICAgICAgbWluSWR4ID0gbWlkOwogICAgICAgICAgICAgICAgICAgICAgICBtYXhWYWwgPSBhcnJbbWlkIC0gMV07CiAgICAgICAgICAgICAgICAgICAgICAgIG1heElkeCA9IG1pZCAtIDE7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAodGFyZ2V0ID4gbWluVmFsICYmIHRhcmdldCA+IGFycltuIC0gMV0pIHsKICAgICAgICAgICAgYmluYXJ5U2VhcmNoKDAsIG1heElkeCwgYXJyLCB0YXJnZXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJpbmFyeVNlYXJjaChtaW5JZHgsIG4gLSAxLCBhcnIsIHRhcmdldCk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgdm9pZCBiaW5hcnlTZWFyY2goaW50IGxvdywgaW50IGhpZ2gsIGludFtdIGFyciwgaW50IHRhcmdldCkgewogICAgfQp9