Leecode-34(二分查找)

博客围绕LeetCode 34题,即在排序数组中查找元素的第一个和最后一个位置展开。采用二分查找思路,分别找最左侧和最右侧下标,但出现超出时间限制问题。还探讨了二分查找时间复杂度为log2的原因,以及将Java代码改成Python3仍超时的疑惑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DAY 3(问题未解决)

leecode-34:在排序数组中查找元素的第一个和最后一个位置
tag:二分查找

给定一个按照升序排列的整数数组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]

主要思路

  1. “有序”“数组”结合起来,肯定要用到二分查找这一类;
  2. 首先是找最左侧的下标,利用二分查找,首先找到与目标值target,然后因为是找最左侧的下标,把right = mid -1 来一直往左边逼近最左侧的值
  3. 至于找最右侧的下标,就是将left = mid+1来逼近最右侧的下标
  4. 如果没有找到则说明不存在返回-1

出现的问题:

  1. 超出时间限制
    确实此处应该没有用到二分查找,这个的时间复杂度应该是O(n)
    Java版本的二分法查找
    在这里插入图片描述

二分查找的时间复杂度为什么是log2?
https://blog.youkuaiyun.com/u010452388/article/details/80875958
https://blog.youkuaiyun.com/u010452388/article/details/80891462
log N是如何得来的:对于N个数字的数组,查找到目标值只需要执行logN次(以2为底数)

log N是如何得来的:对于N个数字的数组,查找到目标值只需要执行logN次(以2为底数)
![从上表可以看出N/(2K)肯定是大于等于1,也就是N/(2K)>=1,我们计算时间复杂度是按照最坏的情况进行计算,也就是是查到剩余最后一个数才查到我们想要的数据,也就是
N/(2^K)=1
=>N=2^K
=>K=log2N

将Java 代码改成Python3 为什么依旧超出时间限制呢???(没搞明白)
在这里插入图片描述
用函数调用来做呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值