我是靠谱客的博主 忐忑鸵鸟,最近开发中收集的这篇文章主要介绍leetcode每天5题-Day221.二分查找2.搜索插入位置3.在排序数组中查找元素的第一个和最后一个位置4.x的平方根5.有效的完全平方数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 1.二分查找
  • 2.搜索插入位置
  • 3.在排序数组中查找元素的第一个和最后一个位置
  • 4.x的平方根
  • 5.有效的完全平方数

前天做二叉树的题,很难做下去,偶然间看到代码随想录,以后就按照这个顺序刷题吧

????二分查找解析

1.二分查找

704. 二分查找-简单
重点:边界条件,确定好是用左闭右闭区间还是左闭右开区间
b站视频讲解

var search = function(nums, target) {
    if(nums.length==0) return -1;
    if(nums.length==1) return nums[0]==target?0:-1;
    let l=0,r=nums.length-1;
    while(l<=r){
        let mid=Math.floor(l+(r-l)/2);
        if(nums[mid]==target){
            return mid;
        }else if(nums[mid]>target){
            r=mid-1;
        }else{
            l=mid+1;
        }
    }
    return -1;
};

2.搜索插入位置

35. 搜索插入位置-简单
①暴力
考虑四种情况:
目标值在数组所有元素之前
目标值等于数组中某一个元素
目标值插入数组中的位置
目标值在数组所有元素之后

var searchInsert = function(nums, target) {
    for(let i=0;i<nums.length;i++){
        if(nums[i]>=target) return i;
    }
    return nums.length;
};

时间复杂度:O(n)
空间复杂度:O(1)
②二分查找

var searchInsert = function(nums, target) {
    const len=nums.length;
    let l=0,r=len-1;
    while(l<=r){
        mid=Math.floor((l+r)/2);
        if(nums[mid]<target){
            l=mid+1;
        }else if(nums[mid]>target){
            r=mid-1;
        }else{
            return mid;
        }
    }
    // return l;
    // 因为在 nums[mid]<target 这个判断条件里 r已经+1了
    return r+1;
};

3.在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置-中等

①先二分查找,再左右滑动指针找区间

var searchRange = function(nums, target) {
    let index=binarySearch(nums,target);
    if(index==-1) return [-1,-1];

    const ans=[];
    let left=index,right=index;
        while(left-1>=0&&nums[left-1]==target){ //防止数组越界。逻辑短路,两个条件顺序不能换
            left--;
        }
        while(right+1<nums.length&&nums[right+1]==target){
            right++;
        }
        ans[0]=left;
        ans[1]=right;
    
    return ans;
};

var binarySearch=function(nums,target){
let l=0,r=nums.length-1;
    while(l<=r){
        let mid=Math.floor(l+(r-l)/2);
        if(nums[mid]==target){
            return mid;
        }else if(nums[mid]<target){
            l=mid+1;
        }else{
            r=mid-1;
        }
}
return -1;
};

重点:用两次二分分别寻找左右边界,该 边界不包含target !不包含target!不包含target!

在这里插入图片描述

var searchRange = function(nums, target) {
    const getLeftBorder=(nums,target)=>{
        let l=0,r=nums.length-1;
        let leftBorder=-2;
        while(l<=r){
            let mid=Math.floor(l+(r-l)/2);
            if(nums[mid]>=target){
                r=mid-1;
                leftBorder=r;
            }else{
                l=mid+1;
            }
        }
        return leftBorder;
    }

    const getRightBorder=(nums,target)=>{
        let l=0,r=nums.length-1;
        let rightBorder=-2;
        while(l<=r){
            let mid=Math.floor(l+(r-l)/2);
            if(nums[mid]<=target){
                l=mid+1;
                rightBorder=l;
            }else{
                r=mid-1;
            }
        }
        return rightBorder;
    }

    let leftBorder=getLeftBorder(nums,target);
    let rightBorder=getRightBorder(nums,target);

    // 情况一
    if(leftBorder===-2||rightBorder===-2) return [-1,-1];

    //情况三
    if(rightBorder-leftBorder>1) return [leftBorder+1,rightBorder-1];

    // 情况二
    return [-1,-1];
};

其实没看懂怎么找的左右边界...

4.x的平方根

69. x 的平方根 -简单
①二分

var mySqrt = function(x) {
    if(x<=1) return x;
    let l=0,r=x-1;
    while(l<=r){
        mid=Math.floor((l+r)/2);
        if(mid*mid>x){
            r=mid-1;
        }else if(mid*mid<x){
            l=mid+1;
        }else{
            return mid;
        }
    }
    return r;
};

5.有效的完全平方数

367. 有效的完全平方数-简单
①二分

var isPerfectSquare = function(num) {
    let l=0,r=num-1;
    if(num<=1) return true;
    while(l<=r){
        mid=Math.floor(l+(r-l)/2);
        if(mid*mid>num){
            r=mid-1;
        }else if(mid*mid==num){
            return true;
        }else{
            l=mid+1;
        }
    }
    return false;
};

最后

以上就是忐忑鸵鸟为你收集整理的leetcode每天5题-Day221.二分查找2.搜索插入位置3.在排序数组中查找元素的第一个和最后一个位置4.x的平方根5.有效的完全平方数的全部内容,希望文章能够帮你解决leetcode每天5题-Day221.二分查找2.搜索插入位置3.在排序数组中查找元素的第一个和最后一个位置4.x的平方根5.有效的完全平方数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部