Leetcode-Solutions

My Leetcode Solutions.

View on GitHub

33. Search in Rotated Sorted Array

Topics: Array Binary Search

Solution

這題是 153. Find Minimum in Rotated Sorted Array 的延伸,題目要求變成給你一個 target,並且尋找這個排序過且位移的陣列的 target 在哪裡,找不到就回傳 -1

我們可以先用 153. Find Minimum in Rotated Sorted Array 裡面的方法二分搜到最小的數字在哪一個位置 p。找到之後我們就可以做第二次二分搜,尋找 p ~ p + n 之間的數字,並且在搜尋過程中取 index % n 的餘數,因為位移後的 index 會超過 n。

Implementation

class Solution {
    fun search(nums: IntArray, target: Int): Int {
        val n = nums.size
        var l = 0
        var r = nums.lastIndex

        while (r - l > 1) {
            val m = (l + r) / 2
            if (nums[m] > nums[l] && nums[m] > nums[r]) l = m
            else r = m
        }

        if (nums[l] > nums[r]) l = r 
        r = l + n

        while (r - l > 1) {
            val m = (l + r) / 2
            if (nums[m % n] == target) return m % n
            if (nums[m % n] > target) r = m
            else l = m
        }
        
        return if (nums[l % n] == target) l % n else -1
    }
}