首页 > 编程语言 >代码随想录算法训练营第一天 | 704.二分查找;27. 移除元素

代码随想录算法训练营第一天 | 704.二分查找;27. 移除元素

时间:2024-05-24 15:44:37浏览次数:24  
标签:二分 27 ## 随想录 查找 移除 排序 指针

代码随想录算法训练营第一天 | 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题:二分查找红蓝法步骤:

  1. 建模
  2. 套入算法
  3. 增加判断标准

建模示例:

  1. 起始状态

  1. 终止状态

##查找的范围为[0,N)
l,r = -1,N
while (l+1)!=r: ##循环终止的条件:红蓝边界重合;左右指针相邻
	mid = (l+r)//2 ##mid是左右指针的靠前的中间值
	if fuhe蓝色条件A:
		l = mid
	else:
		r = mid
##最终返回什么值由模型决定

注意事项:

  1. 循环停止的判断条件:统一写成 l+1<r。 如果跨数组,或者跨区域,则必须选择l+1<r (例题:1855. 下标对中的最大距离
  2. 搜索完毕的特殊状态:l=首元素下标-1;全部为红色

技巧:

  1. 排序(对数组首先进行排序 排序完成后再进行查找 可以根据条件决定排序的方向)
    1. 例题:1608. 特殊数组的特征值
  2. 构造二分查找区间:target和整数直接的必要条件关系,利用关系进行夹逼
    1. 例题:69. x 的平方根
  3. 区间边界设定和边界值颜色是否确定有关;不确定就移动一格
  4. 逐步缩小二分查找区间
    1. 例题:1855. 下标对中的最大距离1300. 转变数组后最接近目标值的数组和
  5. 多维度向量二分查找:一个向量为主键进行排序
    1. 主维度从小到大排序,从属维度从大到小排序 例如:354. 俄罗斯套娃信封问题
    2. 主维度从小到大排序,从属维度动态插入排序 例如: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

相关文章

  • 代码随想录算法训练营第十五天 | 层序遍历 、226.翻转二叉树、101.对称二叉树
    层序遍历题目链接:学会二叉树的层序遍历,可以一口气打完以下十题:102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针117.填充每个节点的下一个右侧节点......
  • 代码随想录算法训练营第三十六天|860.柠檬水找零、406.根据身高重建队列、452. 用最少
    860.柠檬水找零文档讲解:代码随想录题目链接:.-力扣(LeetCode)注意看提示:bills[i] 不是 5 就是 10 或是 20 场景较为固定遇到了20,优先消耗10classSolution:deflemonadeChange(self,bills:List[int])->bool:total={5:0,10:0,20:0}......
  • 代码随想录算法训练营第二天|977(双指针),209(滑动窗口),59(螺旋矩阵)
    977.有序数组的平方**1.数组中有正有负,且本身有序。平方后,较大值从两边来比较取出。**2.使用头尾指针方法。209.长度最小的子数组**1.从数组中找符合要求的连续子数组**2.滑动窗口方法:本质为快慢双指针,快指针不断前进直到子数组满足要求,然后慢指针前进直到子数组不满足......
  • Testing Egineer note:2024_4_27-day01-part02
    肖sir__软件测试之计算机基础_1.2软件测试之计算机基础1.硬件:计算机的硬件是计算机的各种设备的总称,硬件分为五个部分:(1)运行器(cpu)(2)控制器(主板)(3)存储器(硬盘)机械硬盘和固态硬盘(4)输入设备(键盘,鼠标)(5)输出设备(显示器,音响)2、软件:当电脑启动时的应用程序,应用软件(腾讯,qq,有道......
  • 代码随想录算法训练营第第15天 | 层序遍历10道题 、226.翻转二叉树 、101. 对称二叉树
    层序遍历看完本篇可以一口气刷十道题,试一试,层序遍历并不难,大家可以很快刷了十道题。题目链接/文章讲解/视频讲解:https://programmercarl.com/0102.二叉树的层序遍历.html层序遍历,10道题,一一通过,比较简单226.翻转二叉树(优先掌握递归)这道题目一些做过的同学理解的也不够深......
  • uni.$off 可能会移除过多的通知,导致通知不触发
    如果页面A和页面B都注册通知'info-change',//页面AonLoad(options){uni.$on('info-change',this.reloadListA);},//页面BonLoad(options){uni.$on('info-change',this.reloadListB);},在 onUnload函数种都移除了这个通知,但是......
  • 27.并发编制【四】互斥锁与队列
    【一】互斥锁(进程间同步)1)概念一种用于多线程编程中控制对方共享资源访问机制为当前进程或线程添加额外的限制,限制当前时间段只能由当前进程使用,当前进程使用完成后才能其他进程继续使用其可保证同一时间只有一个进程在执行关键代码段,从而保证了数据的安全性2)多个进程......
  • Java RMI遇到的Connection refused to Host: 127.x.x.x/192.x.x.x/10.x.x.x问题解决方
    问题故障解决记录--JavaRMIConnectionrefusedtohost:x.x.x.x....在学习JavaRMI时,我遇到了以下情况问题原因:可能大家的host是10或者192的私有地址,我估计都是和我一样的一个原因:/etc/hosts文件的配置问题(我是ubuntu系统下的实验环境),也就是主机名称和IP地址的映射关系......
  • P3270 [JLOI2016] 成绩比较
    记\(a_i=N-R_i,n=N-1\)。先不考虑有多少人被碾压,计算出符合排名限制的方案数。枚举每门课和B神在每门课中的得分,选出\(a_i\)个人得分小于等于他,即:\[\prod\limits_{i=1}^m\dbinom{n}{a_i}\sum\limits_{j=1}^{U_i}j^{a_i}(U_i-j)^{n-a_i}\]设\(s(x)=\sum\limits_{j=1}^{......
  • 代码随想录算法训练营第一天|704,34,35(二分查找),27(双指针)
    二分查找1.使用条件:数组,升序,值不唯一。2.时间复杂度O(logn)可分为左闭右闭,左闭右开两种区间类型来求解。左闭右闭:left=0,right=nums.Length-1,while(left<=right),right=middle-1.左闭右开:left=0,right=nums.Length,while(left<right),right=middle.......