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

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

相关推荐
俺不要写代码4 分钟前
lambda表达式理解
c++·算法
自我意识的多元宇宙6 分钟前
二叉树遍历方式代码解读(3层序遍历)
数据结构
澈2077 分钟前
动态内存管理:从基础到实战详解
c++·算法
想唱rap12 分钟前
C++11之包装器
服务器·开发语言·c++·算法·ubuntu
im_AMBER23 分钟前
Leetcode 158 数组中的第K个最大元素 | 查找和最小的 K 对数字
javascript·数据结构·算法·leetcode·
脱氧核糖核酸__28 分钟前
LeetCode热题100——48.旋转图像(题解+答案+要点)
c++·算法·leetcode
木井巳30 分钟前
【递归算法】字母大小写全排列
java·算法·leetcode·决策树·深度优先
宵时待雨31 分钟前
优选算法专题2:滑动窗口
数据结构·c++·笔记·算法
Mr_pyx33 分钟前
LeetCode HOT 100 —— 矩阵置零(多种解法详解)
算法·leetcode·矩阵
葫三生33 分钟前
《论三生原理》系列:文化自信、知识范式重构与科技自主创新的思想运动源头?
大数据·人工智能·科技·深度学习·算法·重构·transformer