xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

LeetCode Binary Search All In One

LeetCode Binary Search All In One

Binary Search

二分查找算法

https://leetcode-cn.com/problems/binary-search/

https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-zhao-by-leetcode/

复杂度分析

时间复杂度:\mathcal{O}(\log N)O(logN)。
空间复杂度:\mathcal{O}(1)O(1)。

LeetCode Binary Search Best Solutions in JavaScript

  1. 位运算

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
const search = (nums, target) => {
  if(nums.length === 0){
    return -1;
  }
  let lo = 0;
  let hi = nums.length - 1;
  while(lo <= hi){
    // 位运算 12 >> 1 === 6 ✅
    const mid = lo + ((hi - lo) >> 1);
    if(nums[mid] === target){
      return mid;
    }else if(nums[mid] < target){
      lo = mid + 1;
    }else{
      hi = mid - 1;
    }
  }
  return -1;
};

  1. 经典双指针
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function(nums, target) {
    let left = 0;
    let right = nums.length-1
    let middle
    while(right >= left){
        middle = Math.floor((left+right)/2)
        const midval = nums[middle]
        if(midval === target) return middle;
        else if(midval > target) right = middle-1; 
        else left = middle +1; 
    }
    return -1
};

bad

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function(nums, target) {
  const findValue = (arr, target) => {
    let result = -1;
    let len = arr.length;
    let index = Math.floor(len / 2);
    let mid = arr[index];
    let leftArr = arr.slice(0, index)
    let rightArr = arr.slice(index + 1, len)
    if(mid === target) {
      result = nums.indexOf(mid);
    } else {
      if(mid > target) {
        // left
        result = findValue(leftArr, target)
      }
      if(mid < target) {
        // right
        result = findValue(rightArr, target)
      }
    }
    return result;
  }
  return findValue(nums, target);
};



refs

https://leetcode.com/problemset/all/

https://leetcode-cn.com/problemset/all/




©xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


posted @   xgqfrms  阅读(107)  评论(6编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
历史上的今天:
2019-11-06 css var & auto width css triangle All In One
2019-11-06 how to access object's value without knowing the object's key in javascript?
2019-11-06 react hooks & props change & pagination current bug
2018-11-06 icon fonts generator & svg All In One
2018-11-06 favicon.ico generator
点击右上角即可分享
微信分享提示