1.题目:
2.解析:这里不能用传统二分,因为涉及范围,传统二分时间复杂度会降为O(N),要做些改动。
步骤一:查找区间左端点
细节图:
步骤二:查找区间右端点:
细节图:
代码:
javapublic 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.非朴素二分模板:在理解原理基础上
二分查找一>:在排序数组中查找元素的第一个和最后一个位置
robin_suli2024-10-03 22:12
相关推荐
不知天地为何吴女士1 小时前
Day32| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯小坏坏的大世界1 小时前
C++ STL常用容器总结(vector, deque, list, map, set)励志要当大牛的小白菜3 小时前
ART配对软件使用qq_513970444 小时前
力扣 hot100 Day56PAK向日葵4 小时前
【算法导论】如何攻克一道Hard难度的LeetCode题?以「寻找两个正序数组的中位数」为例爱装代码的小瓶子6 小时前
数据结构之队列(C语言)爱喝矿泉水的猛男7 小时前
非定长滑动窗口(持续更新)YuTaoShao7 小时前
【LeetCode 热题 100】131. 分割回文串——回溯YouQian7727 小时前
Traffic Lights set的使用go54631584659 小时前
基于深度学习的食管癌右喉返神经旁淋巴结预测系统研究