Бинарный поиск граничных случаев - PullRequest
0 голосов
/ 25 апреля 2020

В последнее время я задаю некоторые вопросы по leetcode, но вопрос смущает меня.

Требуется поиск числа в отсортированном по ротации массиве. Я понимаю, что базовая c концепция бинарного поиска состоит в том, чтобы разделить что-то на 2, так что это будет O (log n).

Когда я читаю ответ онлайн, 2 вопросы только что выскочили.

1. в чем смысл добавлять равные войдите во второе if условие (nums[mid] >= nums[start]). В вопросе указано, что все номера будут уникальными. Нет никакого способа быть равным числом.
2. В решении также необходимо указать guish, в каком направлении вращается массив. В чем причина?

Заранее большое спасибо.


class Solution {
    public int search(int[] nums, int target) {
        if (nums == null)
            return -1;

        int start = 0;
        int end = nums.length - 1;

        while (start <= end) {
            int mid = start + (end - start) / 2;

            if(nums[mid] == target) {
                return mid;
            }

            if(nums[mid] >= nums[start]){
                if(nums[start] <= target && nums[mid] > target){
                    end = mid - 1;
                }else{
                    start = mid + 1;
                }
            }else{
                if(nums[mid] < target && nums[end] >= target){
                    start = mid + 1;
                }else{
                    end = mid - 1;
                }
            }
        }

        return -1;
    }
}

...