算法题-14

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

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

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入: nums = 5,7,7,8,8,10, target = 8
输出:3,4

示例 2:

输入: nums = 5,7,7,8,8,10, target = 6
输出:-1,-1

示例 3:

输入: nums = \[\], target = 0
输出:-1,-1

首先这是一个有序数组,而且题目要求我们我们算法时间复杂度,想引导我们使用二分查找,但是题目是想让我们返回一个target的边界,那么我们可以使用两次二分查找分别去寻找target的左右边界,找左边界numsmid >= target,我们就往左缩:right = mid - 1​​​​​​​,找右边界numsmid <= target​​​​​​​,我们往右扩:left = mid + 1,具体代码简单

javascript 复制代码
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var searchRange = function(nums, target) {
    const findLeft = () => {
        let left = 0
        let right = nums.length - 1
        let res = -1

        while (left <= right) {
            let mid = Math.floor((left + right) / 2)

            if (nums[mid] >= target) {
                right = mid - 1
            } else {
                left = mid + 1
            }

            if (nums[mid] === target) {
                res = mid
            }
        }

        return res
    }

    const findRight = () => {
        let left = 0
        let right = nums.length - 1
        let res = -1

        while(left <= right){
            let mid = Math.floor((left + right) / 2)

            if (nums[mid] <= target) {
                left = mid + 1
            
            } else {
                right = mid - 1
            }

            if (nums[mid] === target) {
                res = mid
            }
        }

        return res
    }
    return [findLeft(), findRight()]
};
相关推荐
一木 之林13 分钟前
四、STL容器与数据结构
开发语言·数据结构·c++
_Narcissus_1 小时前
二分算法笔记及例题
数据结构·c++·笔记·算法·蓝桥杯·查找·二分算法
tachibana22 小时前
RAGAS 指标解读
数据库·人工智能·算法·机器学习·架构·大模型·llm
qq_419563092 小时前
ToT 的 BFS/DFS 有个致命缺口:蒙特卡洛树搜索(MCTS)用「随机试错+统计」让大模型想得更深,小模型 + 它竟超过 GPT-4
算法·深度优先·宽度优先
万法若空3 小时前
CSP-J/S 排序算法完整专题训练题单
数据结构·算法·排序算法
凉茶钱3 小时前
【数据结构】排序(快排,选择,直接插入,希尔)
数据结构·算法·排序算法
weixin_446260853 小时前
拆解再复用:大模型智能体的跨任务技能迁移
人工智能·深度学习·算法
Brilliantwxx3 小时前
【Linux】 进程(4)七大进程状态深度解析
linux·运维·算法
青少儿编程课堂4 小时前
用图形化编程做一个“少年探险闯关”小游戏:方向键控制、碰撞检测与多关卡串起完整项目
c++·python·算法·bfs·信息学竞赛
CQU_JIAKE4 小时前
8.22【A】
算法