代码随想录算法训练营第一天 | 704.二分查找(红蓝模板法);27. 移除元素(双指针法)
704题链接:https://leetcode.cn/problems/binary-search/description/
二分查找:https://programmercarl.com/0704.二分查找.html#其他语言版本
二分查找红蓝法笔记:
二分查找为什么总是写错?_哔哩哔哩_bilibili
34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)
27题链接:https://leetcode.cn/problems/remove-element/submissions/534439498/
移除元素:https://programmercarl.com/0027.移除元素.html#其他语言版本
74题:二分查找红蓝法步骤:
- 建模
- 套入算法
- 增加判断标准
建模示例:
- 起始状态
- 终止状态
##查找的范围为[0,N)
l,r = -1,N
while (l+1)!=r: ##循环终止的条件:红蓝边界重合;左右指针相邻
mid = (l+r)//2 ##mid是左右指针的靠前的中间值
if fuhe蓝色条件A:
l = mid
else:
r = mid
##最终返回什么值由模型决定
注意事项:
- 循环停止的判断条件:统一写成 l+1<r。 如果跨数组,或者跨区域,则必须选择l+1<r (例题:1855. 下标对中的最大距离)
- 搜索完毕的特殊状态:l=首元素下标-1;全部为红色
技巧:
- 排序(对数组首先进行排序 排序完成后再进行查找 可以根据条件决定排序的方向)
- 构造二分查找区间:target和整数直接的必要条件关系,利用关系进行夹逼
- 例题:69. x 的平方根
- 区间边界设定和边界值颜色是否确定有关;不确定就移动一格
- 逐步缩小二分查找区间
- 多维度向量二分查找:一个向量为主键进行排序
- 主维度从小到大排序,从属维度从大到小排序 例如:354. 俄罗斯套娃信封问题
- 主维度从小到大排序,从属维度动态插入排序 例如:1847. 最近的房间
27题:双指针法
快慢指针 模板 忘了 所以第一遍写的很困难
fast = 0 ##快指针 用于遍历
slow = 0 ##慢指针 用于筛选条件(一般为符合条件的)
while fast<len(nums):
if nums[fast]!=val: ##满足条件
nums[slow] = nums[fast]
slow = slow+1 ##slow慢就是因为要符合条件才移动
fast = fast+1 ##fast快是因为任何时间都会移动
标签:二分,27,##,随想录,查找,移除,排序,指针
From: https://www.cnblogs.com/P201821440041/p/18211027