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

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.非朴素二分模板:在理解原理基础上

相关推荐
丶小鱼丶12 分钟前
数据结构和算法之【栈】
java·数据结构
玛丽莲茼蒿14 分钟前
LeetCode hot100【相交链表】【简单】
算法·leetcode·职场和发展
罗湖老棍子14 分钟前
They Are Everywhere(Codeforces- P701C)
算法·滑动窗口·codeforce题解
wen__xvn14 分钟前
力扣模拟题刷题
算法·leetcode
bbbb36514 分钟前
算法复杂度与能耗关系的多变量分析研究的技术7
算法
不要秃头的小孩17 分钟前
力扣刷题——111.二叉树的最小深度
数据结构·python·算法·leetcode
wutang0ka29 分钟前
LeeCode HOT 100 104.二叉树的最大深度
算法
散峰而望33 分钟前
【基础算法】从入门到实战:递归型枚举与回溯剪枝,暴力搜索的初级优化指南
数据结构·c++·后端·算法·机器学习·github·剪枝
setmoon21435 分钟前
C++代码规范化工具
开发语言·c++·算法
进击的小头1 小时前
第15篇:MPC的发展方向及展望
python·算法