zoukankan      html  css  js  c++  java
  • xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

    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 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    P1342 请柬
    P1186 玛丽卡
    Scala 中下划线的用法
    IDEA2017 maven Spark HelloWorld项目(本地断点调试)
    Spark内存管理详解
    Spark基础知识
    scala基本语法
    分布式锁的一点理解
    Redis并发问题
    redis集群原理
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/13936328.html
Copyright © 2011-2022 走看看