acwing 算法基础班学习笔记-第一讲.基础算法

一、快速排序
算法核心是分治思想:选择一个点为轴心,将所有小于它的数放到它的左边,所有大于它的数放到它的右边,然后递归排序两侧的空间。
二、归并排序
1.划分:将待排序序列递归划分为长度为1或0的子序列(必定有序)
2.归并:将两个有序序列归并,核心是双指针算法,谁小选谁并往后移。
可用归并排序求逆序对数量:当j后移时,说明j比第一个数组中的len - i +1个数都要小,因此逆序对就要加上len - i + 1。
三、二分
核心思想是分治,可将暴力遍历(O n)的做法优化到log n,注意二分不仅用在有序数列找关键字,任意可将一个序列划分为两段的属性,都可以用二分找到那个分界点。
四、高精度算法
用数组的每一位表示十进制数的每一位,由于数组可以开很长,因此可以保证数据的精度可以很大。由于加法和乘法可能涉及到最高位的进位,而数组在尾部增加数比较容易,因此用数组从低位到高位来表示十进制数的低位到高位。
加法:用一个变量t来存储同位相加的进位值和本位和(t = a+b, 本位和是t%10,进位值是t/10)。
乘法:同加法,用t存储进位值和本位和,t = ab, 本位和是t%10,进位值是t/10。
注意加法和乘法最后还要判断t是否是0,若不是,说明最高位有进位,数组要再增加位存储t的值。
除法:用一个变量r来存储余数,每一轮将余数乘以10后加上a[i]再除以除数(r = r
10 + a[i]),r/b就是本位商。注意除法是从高位到低位计算,与乘法和加法不同,若同时使用时可在除法中将数组翻转计算,最后再翻转输出,记得删去前导0。
五、前缀和和差分
前缀和:Sn为前n个数的和,Sb - Sa-1即为从a到b的数的和,预处理之后任意区间内的总和查询都可在O(1)的时间复杂度求出。
差分:前缀和的逆运算,可看成前缀和数组S[n]对应的a[n],用于多个将一段数同加/减去一个数的操作(每次实现只要O1,最后用a[n]处理得到最后的S[n],On)核心操作是插入:a[l] + c, a[r + 1] - c。该操作可实现将Sn从l到r都加上一个c,同时也可用于将Sn序列预处理成差分数组(将Sn逐个插入到an)。
六、双指针算法
核心思想是利用单调性,省去多余的遍历,将原本On²的问题化简为On,具体形式可分为:
1.双序列双指针:如归并排序
2.单序列双指针:如字符串匹配
七、位运算
计算机中 n%2或 n && 1即取出n中最低位的数(只能从低到高取)。
八、离散化
核心思想是将很大范围的稀疏点按次序映射到一个数组中,类似哈希,方便查询一个范围的和等操作。
九、区间合并
按一端排序,比较每段此端和上一段另一端的大小可得出是否有重叠,数轴线性有单调性,此思想也用于贪心。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值