二分查找一>:在排序数组中查找元素的第一个和最后一个位置

1.题目:

2.解析:这里不能用传统二分,因为涉及范围,传统二分时间复杂度会降为O(N),要做些改动。

步骤一:查找区间左端点

细节图:

步骤二:查找区间右端点:

细节图:

代码:

java 复制代码
public int[] searchRange(int[] nums, int target) {
        int[] ret = new int[2];
        ret[0] = ret[1] = -1;
        if(nums.length == 0) return ret;

        //二分查找区间左端点
        int left = 0;
        int right = nums.length-1;
        while(left < right){
            int mid = left+(right-left)/2;
            if(nums[mid] < target) left = mid+1;
            else right = mid;
        }

        //判断是否有结果
        if(nums[left] == target){
            ret[0] = left;
        }else {
            return ret;
        }

        //二分查找区间右端点
        left = 0;
        right = nums.length-1;
        while(left < right){
            int mid = left+(right-left+1)/2;
            if(nums[mid] <= target) left = mid;
            else right = mid-1;
        }

        //判断是否有结果
        ret[1] = left;
        return ret;
    }

3.非朴素二分模板:在理解原理基础上

相关推荐
萌新彭彭5 分钟前
vLLM主要模块Scheduler详解
算法·源码阅读
灵动小溪8 分钟前
时频信号分析总结
算法
CoovallyAIHub9 分钟前
让Qwen-VL的检测能力像YOLO一样强,VLM-FO1如何打通大模型的视觉任督二脉
深度学习·算法·计算机视觉
2401_8414956420 分钟前
【自然语言处理】基于统计基的句子边界检测算法
人工智能·python·算法·机器学习·自然语言处理·统计学习·句子边界检测算法
liu****35 分钟前
16.udp_socket(三)
linux·开发语言·数据结构·c++·1024程序员节
CoovallyAIHub1 小时前
突破跨模态识别瓶颈!火箭军工程大学提出MFENet:让AI在白天黑夜都能准确识人
深度学习·算法·计算机视觉
CoovallyAIHub1 小时前
TypeScript超越Python,以66%增速跃升第一,Python稳居AI领域王座
深度学习·算法·计算机视觉
User_芊芊君子1 小时前
【LeetCode经典题解】递归破解对称二叉树之谜
算法·leetcode·职场和发展
Rock_yzh1 小时前
LeetCode算法刷题——49. 字母异位词分组
数据结构·c++·学习·算法·leetcode·职场和发展·哈希算法
小欣加油1 小时前
leetcode 2654 使数组所有元素变成1的最少操作次数
数据结构·c++·算法·leetcode·职场和发展