欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-17 14:43:22
...

//在 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;
}
相关标签: 算法