算法-二分查找右边界

# 二分查找右边界

实现原理: 传入的是一个有序的数组, 左右递减, 取中间下标进行匹配, 如果中值小于目标值, 右下标向左移动一位, 小于则左下标等于中下标, 缩小搜索边界

点击查看代码










 










 





 











/**
 * 二分查找右边界
 * @param {number[]} nums 
 * @param {number} target 
 * @returns number
 */
const binarySearchRightBound = (nums, target) => {
  let left = 0,
    right = nums.length - 1

  while(left <= right) {
    // const mid = left + ((right - left) >> 1)
    // if (nums[mid] < target) {
    //   left = mid + 1
    // } else if (nums[mid] > target) {
    //   right = mid - 1
    // } else if (nums[mid] === target) {
    //   left = mid + 1
    // }
    // --- TODO: Test case ---
    // mid = left + Math.floor((right - left) / 2)
    const mid = left + ((right - left) >> 1)
    if (nums[mid] > target) {
      right = mid - 1
    } else {
      left = mid + 1
    }
  }

  return nums[right] === target ? right : -1
}

// ---------- Test ----------
const nums = [1,2,3,4,5,6,6,6,6,6,6,7]
const target = 6

console.log(binarySearchRightBound(nums, target))
// 10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38