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 12🧭行动:这次学习了匿名函数与变量定义🤓体会:这两种方法都能提高代码的可读性与可维护性,在特定情况都有很大作用🧑💻代码:#变量定义-指定类型注解abc: int = 915score1: float= 95.5hobby2: str = "python"result: bool = Truecba: None = Noneenglish: list[str] = ["A","B
3
day42今天开始做伙伴匹配系统,目前只完成了前端初始化和主页的导航栏和底部栏的编写。抢阿里云云服务器没抢到,明天定个闹钟抢。今天收到最右的笔试了,后天晚上7点。还有约了一个自研电话初试,明天下午2点。用友的全栈工程师笔试和ai面还没有做。感觉9月份笔试面试确实多一些,希望在笔试面试中成长,一次错记住不足的地方并提升。算法一题,java基础。
2
🚩JavaD151、写了三段代码,没有代码提示,只有阿里巴巴代码规范插件2、"写完"和"写好"代码差距太大3、Kimi制定了一份52周的学习计划,每天都有具体的代码计划,希望能坚持
1
今天学习了:①Python基础之——四大序列(list、tuple、dict、set)和两大流程控制(条件判断/模式匹配+for/while循环)②Python函数之——函数的定义、调用以及五大类参数设置和传递
2
day2 移除元素[双指针/栈的思维] 26.9.16
1
