Skip to content

Latest commit

 

History

History
33 lines (31 loc) · 950 Bytes

File metadata and controls

33 lines (31 loc) · 950 Bytes

TODO: Add notes.

fun search(nums: IntArray, target: Int): Boolean {
    var left = 0
    var right = nums.size - 1
    while (left <= right) {
        val middle = left + (right - left) / 2
        if (nums[middle] == target) return true
        // The key difference between this and 33. Search in Rotated Sorted Array.
        if (nums[left] == nums[middle]) {
            left++
            continue
        }
        if (nums[left] <= nums[middle]) {
            if (target in nums[left]..nums[middle]) {
                right = middle - 1
            } else {
                left = middle + 1
            }
        } else {
            if (target in nums[middle]..nums[right]) {
                left = middle + 1
            } else {
                right = middle - 1
            }
        }
    }
    return false
}