二分算法模板

  • 二分搜索:返回非递减数组中小于等于 key 的最大下标
    • 如果均大于 key 返回 -1
    /**
     * 二分搜索:返回非递减数组中小于等于 key 的最大下标
     * 如果均大于 key 返回 -1
     */
    public int binarySearchHigh(long[] nums, int key) {
        int left = 0;
        int right = nums.length - 1;
        int res = -1;

        while (left <= right) {
            // 避免 left+right 越界
            int mid = ((right - left) >> 1) + left;

            if (nums[mid] > key) {
                right = mid - 1;

            } else if (nums[mid] < key) {
                res = mid;
                left = mid + 1;

            } else {
                res = mid;
                left = mid + 1;

            }
        }

        return res;
    }
  • 二分搜索:返回非递减数组中大于等于 key 的最小下标
    • 如果均小于 key 返回 -1
    /**
     * 二分搜索:返回非递减数组中大于等于 key 的最小下标
     * 如果均小于 key 返回 -1
     */
    public int binarySearchLow(long[] nums, int key) {
        int left = 0;
        int right = nums.length - 1;
        int res = -1;

        while (left <= right) {
            // 避免 left+right 越界
            int mid = ((right - left) >> 1) + left;

            if (nums[mid] > key) {
                res = mid;
                right = mid - 1;

            } else if (nums[mid] < key) {
                left = mid + 1;

            } else {
                res = mid;
                right = mid - 1;

            }
        }

        return res;
    }

你可能感兴趣的:(算法模板,算法)