day1 二分查找 26.9.15
[数组] 704. 二分查找 / Easy / ⚠️
题目:
卡点:
- 刚开始不知道什么是时间复杂度
O(1):极快。无论多少数据,瞬间完成。比如:
print(nums[0])(只要数组非空,访问第一个元素)。O(log n):非常快。每次操作都能排除一半的数据。比如:你正在写的二分查找。
O(n):一般。数据量有多大,就要操作多少次。比如:
for i in range(len(nums)):遍历数组。O(n log n):稍慢。通常是高效排序算法(如快速排序、归并排序)的复杂度。
O(n²):很慢。通常是双重循环嵌套。数据量 100 就要操作 10000 次。比如:
for i in nums: for j in nums:
-
知道要怎么二分后卡在了不知道怎么判断结束循环,后面确实想到一种解答(通过elif验证以退出循环)但不够简洁
-
在明白后关注到return就是一个函数的结束标志,不需要考虑太多,循环内但凡触发了return语句循环自动结束了
核心套路:
-
定义区间为 [left, right](左闭右闭),则 while 用 left <= right
-
每次 middle = left + (right - left) // 2,避免溢出(C/Java 里更要注意)
-
如果 nums[middle] > target,说明目标在左半,right = middle - 1
-
如果 nums[middle] < target,目标在右半,left = middle + 1
-
退出循环后没找到,返回 -1
代码:
▼Python复制代码class Solution(object): def search(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ left,right = 0,len(nums)-1 middle = left + right while left <=right: middle = (left + right)//2 if nums[middle] == target: return middle #注意在函数中出现了return则代表着这个函数结束了输出了对应的值 elif nums[middle] < target: left = middle+1 elif nums[middle] > target: right = middle-1 return -1
复杂度:时间 O(log n),空间 O(1)
二刷记录:
- [ ]
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
Day 29✅ 今天做了:Redis消息队列⏰ 明天计划:继续学消息队列
2
Day 17🧭行动:学习了Python最后一个知识点:异常处理🤓体会:Python 程序一旦发生异常,如果没有捕获处理,程序就会直接崩溃终止。使用"try-except"捕获异常,可以预先写好异常处理方案:比如打印友好提示、记录日志、释放资源,保证程序不会直接退出,还能继续运行。🧑💻代码:try:print("================================")# pri
2
Day1今天学习了java中if的使用
2
day 61今天来学校上课了,和教授谈了,可以接下RA工作,不过一周只能charge 10h, 工资很少,不过一个月600刀也勉强比没有好。今天的工作还没做完,最近在做知识库构造,Ui/UX上周就设计完,现在在做底座的建设今天也让Claude直接帮我把Neetcode150 题目+解题思路+代码给我整理了,我发现我真的只有找碎片化时间才能做题,我还不如先背先回忆(之前都做过)祝祖国母亲节日快乐,也
2
Day 1✅ 今天做了:⏰ 明天计划:📚 今日感悟:
0
