LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置【二分查找】
发布日期:2021-06-29 14:32:18 浏览次数:2 分类:技术文章

本文共 1070 字,大约阅读时间需要 3 分钟。

题目描述

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

你的算法时间复杂度必须是 O(log n) 级别。

如果数组中不存在目标值,返回 [-1, -1]。

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8

输出: [3,4]
示例 2:

输入: nums = [5,7,7,8,8,10], target = 6

输出: [-1,-1]

解题思路

可以看作是自己实现 C++ 里的 lower_bound 和 upper_bound 函数。

AC

class Solution {
public: vector
searchRange(vector
& nums, int target) {
if(nums.empty()) return vector
{
-1,-1}; int lower = lower_bound(nums,target); int upper = upper_bound(nums,target)-1; if(lower == nums.size() || nums[lower]!=target) return vector
{
-1,-1}; return vector
{
lower,upper}; } int lower_bound(vector
&nums, int target){ int left=0,right=nums.size(),mid; while(left
= target) right=mid; else left=mid+1; } return left; } int upper_bound(vector
&nums, int target){ int left=0,right=nums.size(),mid; while(left
target) right=mid; else left=mid+1; } return left; }};

转载地址:https://chocolate.blog.csdn.net/article/details/106208107 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode 81. 搜索旋转排序数组 II【二分查找】
下一篇:LeetCode 69. x 的平方根 【二分查找】

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月06日 08时36分10秒