Leetcode 解题模版 - Binary Search

适用场景

一种针对有序区间内的O(logN)的搜索方式,最常见用于已经排好序的Array

解题模版

ini 复制代码
public int binarySearch(int[] arr, int k) {
  int l = 0, r = arr.length - 1;
  while(l <= r) {
    //int mid = (l + r) / 2;   normally avoid since it might overflow for int
    int mid = l + (r - l) / 2;
    if(arr[mid] == k) {
      return mid; 
    } else if (arr[mid] > k) {
      r = mid - 1;
    } else {
      l = mid + 1;
    }
  }
  return -1;  
}

三大模版:

  1. 找一个准确值:

<1> 循环条件: l <= r

<2> 缩减搜索空间:

l = mid + 1

r = mid - 1

  1. 找一个模糊值(比4大的数字, first occurrence of 2)

<1> 循环条件:l < r

<2> 缩减搜索空间:

l = mid

r = mid - 1

or

l = mid + 1

r = mid

  1. 万用型

<1> 循环条件:l < r - 1

<2> 缩减搜索空间:

l = mid

r = mid

变换场景

找一个模糊值

e.g. the first occurance of 2

ini 复制代码
public int binarySearch(int[] arr, int k) {
  int l = 0, r = arr.length - 1;
  while(l < r) {
    int mid = l + (r - l) / 2;
    if(arr[mid] < k) {
      l = mid + 1;
    } else {
      r = mid;
    }
  }
  return l;
}

e.g. last occurrence of 2

ini 复制代码
public int binarySearch(int[] arr, int k) {
  int l = 0, r = arr.length - 1;
  while(l < r) {
    int mid = l + (r - l + 1) / 2;
    if(arr[mid] > k) {
      r = mid - 1;
    } else {
      l = mid;
    }
  }
  return r;
}

万用型 (closest to 2)

<1> 循环条件:l < r - 1

<2> 缩减搜索空间:

l = mid

r = mid

ini 复制代码
public int binarySearch(int[] arr, int k) {
  int l = 0, r = arr.length - 1;
  while(l < r - 1) {
    int mid = l + (r - l) / 2;
    if(arr[mid] < k) 
      l = mid;
    else
      r = mid;
  }

  //upon determine the l/r, compare the value
  if(arr[r] < k) {
    return r;
  } else if(arr[l] > k) {
    return l;
  } else {
    return k - arr[l] > arr[r] - k ? r : l;
  }
}
相关推荐
超梦dasgg14 分钟前
Java 生产环境 MQ 技术选型全解析
java·开发语言·java-rocketmq·java-rabbitmq
霸道流氓气质14 分钟前
Spring AI 多工具链式调用(Tool Chain)极简实战
java·人工智能·spring
枕星而眠16 分钟前
Linux 线程:原理、属性、实战与面试避坑
linux·运维·c语言·面试
心中有国也有家33 分钟前
hccl 架构拆解:昇腾集合通信库到底在做什么?
人工智能·经验分享·笔记·分布式·算法·架构
罗超驿1 小时前
22.深入剖析JDBC架构:从原生API到企业级数据交互核心
java·数据库·mysql·面试
Raink老师1 小时前
【AI面试临阵磨枪-60】微服务下 AI 能力如何封装、网关、限流、监控
人工智能·微服务·面试
小茴香3531 小时前
HTTP缓存
网络协议·http·缓存·面试
一直有一个ac的梦想1 小时前
cmu15445 2025fall lec 18 transactions with two-phase lock
java·开发语言·数据库
九皇叔叔1 小时前
Spring-Ai-Alibaba [04] 04-llm-platform-custom-demo
java·人工智能·spring
技术路上的探险家1 小时前
Sa-Token 单点登录(SSO)三种模式大白话详解:告别重复登录
java·sa-token·单点登录·sso