11-代码随想录34在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置

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

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

进阶:你可以设计并实现时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn) 的算法解决此问题吗?

示例 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]

二分法

python 复制代码
def findtarget(nums,target):
    left,right=0,len(nums)-1
    s=[]
    while left<=right:
        middle=(right-left)//2+left
        if nums[middle]<target:
            left=middle+1
        elif nums[middle]>target:
            right = middle - 1
        else:
            s.append(middle)
            if nums[middle-1]==target:
                s.append(middle-1)
            if nums[middle+1]==target:
                s.append(middle+1)
            break
    if s==[]:
        print("[-1,-1]")
    else:
        print(s)


if __name__=='__main__':
    nums=input("nums=").split()
    target=str(input("target="))
    if nums==[]:
        print("[-1,-1]")
    else:
        findtarget(nums, target)

结果



小结

二分法,找到目标之后,可以在原地左右遍历就行了,不用用二分法整个都去查找核对,那样就跟暴力没什么区别。

相关推荐
代码无bug抓狂人1 分钟前
C语言之可分解的正整数(蓝桥杯省B)
c语言·开发语言·算法
量子-Alex2 分钟前
【大模型技术报告】Seed-Thinking-v1.5深度解读
人工智能·算法
deephub8 分钟前
分类数据 EDA 实战:如何发现隐藏的层次结构
人工智能·python·机器学习·数据分析·数据可视化
深蓝电商API11 分钟前
常见反爬机制分类及对应破解思路
爬虫·python
张3蜂13 分钟前
身份证识别接口方案
人工智能·python·开源
Anastasiozzzz17 分钟前
对抗大文件上传---分片加多重Hash判重
服务器·后端·算法·哈希算法
不染尘.27 分钟前
二叉树相关题目
开发语言·数据结构·c++·算法
Imxyk40 分钟前
力扣:632. 最小区间(贪心)
java·数据结构·算法
Mr_Xuhhh1 小时前
递归和迭代的区别(C/C++实现)
算法
知行合一。。。1 小时前
程序中的log4j、stderr、stdout日志
python·单元测试·log4j