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
相关推荐
2013092416276 小时前
1968年 Hart, Nilsson, Raphael 《最小成本路径启发式确定的形式基础》A* 算法深度研究报告如何原谅奋力过但无声6 小时前
【力扣-Python-滑动窗口经典题】567.字符串的排列 | 424.替换后的最长重复字符 | 76.最小覆盖子串玄冥剑尊7 小时前
贪心算法进阶玄冥剑尊7 小时前
贪心算法深化 I52Hz1187 小时前
力扣73.矩阵置零、54.螺旋矩阵、48.旋转图像BHXDML8 小时前
第一章:线性回归& 逻辑回归iAkuya8 小时前
(leetcode)力扣100 二叉搜索树种第K小的元素(中序遍历||记录子树的节点数)-To be number.wan9 小时前
B 树 vs B+ 树:为什么 MySQL 用 B+ 树,而不是 B 树?杨间9 小时前
《排序算法全解析:从基础到优化,一文吃透八大排序!》Remember_9939 小时前
【LeetCode精选算法】滑动窗口专题二


