ACwing:算法基础课 第一章快排,归并,二分听课笔记

第一章视频笔记

1⃣️视频看算法模版
2⃣️课下要背算法的模版,理解的去背
3⃣️课下要做模版题 一个题目要做个两三遍,做到能一次一分钟的把模版打出来

一。快速排序
1.采用分治的思想
1⃣️确定分界点,有三种:左端点,右端点和中间
2⃣️调整区间
3⃣️递归处理左右两端

2.对于第二步调整区间
1⃣️方法一:暴力法
另外开两个数组,全部搜一遍数组 把在区间分界点两部分的数组分别放入到另开的两个数组里面,然后再依次放回到原数组中

2⃣️方法二:交换法 (优美指针)
就是在首尾用两个指针指示,然后当不满足要求时就交换,并且这种边界容易出现问题的算法可以背模版

PS:Java要用bufferead?C用scanf更好?
Java的bufferead 比Scanner块十多二十倍

二。归并排序
1⃣️确定分界点,这个的分界点是要去中间的,快排的话是可以取随机,左端点或者右端点,或者中间,归并的话就是直接mid=(l+r)/2
2⃣️递归排序左区间和右区间
3⃣️归并左右区间,合二为一

三。二分

1。整数二分
整数的二分的本质是边界问题,即将整个区间一分为二,左边为满足性质,右边为不满足性质,并且由于整数它不具有连续性,所以左边界与右边界不一定相同,因此整数二分的时候要同时考虑找两种边界的情况。两种边界分别对应两种模版,具体用哪个模版看第1点。

有单调性一定可以二分,但没有单调性的也可能进行二分
1.选择二分模版的时候的方法:
1⃣️先写出check函数 (每一次都选择答案所在的区间ture区间)
2⃣️观察check函数中true情况下更新区间的方法
3⃣️true情况下更新区间如果是l=Mid的话则mid=l+r+1 /2反之如果是r=mid的话则是mid=L+r/2
//找左边界:对应的是mid=l+r>>1的模板
//找右边界:对应的是mid=l+r+1>>1的模板

注意⚠️!找左边界的时候,if的check函数看左边界的右侧,即在左边界的右侧的即是true,满足性质,更新区间。找右边界的时候,if的check函数看右边界的左侧,即在左右边界的左侧的即是true,满足性质,更新区间。

2。浮点数二分
边界的范围一般要比题目多两位,比如题目让你保留6位则是1e-8,四位则是1e-6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值