int searchRotated(int[] values, int target) {
int left = 0;
int right = values.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (values[mid] == target) return mid;
if (values[left] <= values[mid]) {
if (values[left] <= target && target < values[mid]) right = mid - 1;
else left = mid + 1;
} else {
if (values[mid] < target && target <= values[right]) left = mid + 1;
else right = mid - 1;
}
}
return -1;
}
def search_rotated(values: list[int], target: int) -> int:
left, right = 0, len(values) - 1
while left <= right:
mid = left + (right - left) // 2
if values[mid] == target:
return mid
if values[left] <= values[mid]:
if values[left] <= target < values[mid]:
right = mid - 1
else:
left = mid + 1
elif values[mid] < target <= values[right]:
left = mid + 1
else:
right = mid - 1
return -1
def searchRotated(values: Array[Int], target: Int): Int =
var left = 0
var right = values.length - 1
while left <= right do
val mid = left + (right - left) / 2
if values(mid) == target then return mid
if values(left) <= values(mid) then
if values(left) <= target && target < values(mid) then right = mid - 1
else left = mid + 1
else if values(mid) < target && target <= values(right) then left = mid + 1
else right = mid - 1
-1
int searchRotated(const std::vector<int>& values, int target) {
int left = 0, right = static_cast<int>(values.size()) - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (values[mid] == target) return mid;
if (values[left] <= values[mid]) {
if (values[left] <= target && target < values[mid]) right = mid - 1;
else left = mid + 1;
} else if (values[mid] < target && target <= values[right]) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}