二分法在循环有序数组查找元素

ぐ巨炮叔叔 提交于 2020-03-02 12:19:17

//在 O(logN) 时间内,从循环有序数组里查找元素

//二分之后,总有一半是有序数组

public static int searchInLoopSortedArray(int[] nums, int target) {
    if(nums.length == 0) return -1;

    int low = 0;
    int high = nums.length - 1;

    while (low <= high) {
        int mid = low + ((high - low) >> 1);
        if(nums[mid] == target) return mid;

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

    return -1;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!