33. Search in Rotated Sorted Array
Last updated
Last updated
class Solution {
fun search(nums: IntArray, target: Int): Int {
if (nums.isEmpty()) return -1
val minIndex = findMin(nums)
var start: Int
var end: Int
var mid: Int
when {
target > nums[nums.lastIndex] -> {
start = 0
end = minIndex - 1
}
else -> {
start = minIndex
end = nums.lastIndex
}
}
while (start <= end) {
mid = (start + end) / 2
when {
target == nums[mid] -> return mid
target < nums[mid] -> end = mid - 1
target > nums[mid] -> start = mid + 1
}
}
return -1
}
private fun findMin(nums: IntArray): Int {
var start = 0
var end = nums.lastIndex
var mid: Int
while (start < end) {
mid = (start + end) / 2
when {
nums[mid] > nums[end] -> start = mid + 1
else -> end = mid
}
}
return start
}
}class Solution {
fun search(nums: IntArray, target: Int): Int {
var start = 0
var end = nums.lastIndex
var mid: Int
while (start <= end) {
mid = (start + end) / 2
when {
target > nums[end] && nums[mid] <= nums[end] -> end = mid - 1
target <= nums[end] && nums[mid] > nums[end] -> start = mid + 1
else -> {
when {
target < nums[mid] -> end = mid - 1
target > nums[mid] -> start = mid + 1
else -> return mid
}
}
}
}
return -1
}
}