
基础算法
文章平均质量分 79
本专栏记录了AcWing算法基础课第一章基础算法的听课笔记,包括排序、二分、高精度、前缀和与差分、双指针算法、位运算、离散化、区间合并等内容。
御用厨师
这里介绍不了我
展开
-
算法 - 双指针算法
双指针算法是我目前接触到的最优雅的算法了。(之前我觉得dp是最优雅的hhh)双指针算法在快排和归并排序中都有用到,主要适用于两种情况:对于一个序列,用两个指针维护一段区间对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作1 是什么双指针其实就是数组的两个下标,双指针算法解决问题时就是扫一遍数组就可以出结果。2 优势双指针算法可以将时间复杂度为O(n2)的暴力做法优化为O(n)做法。优化方法因题而异,但大多都具有某种单调性,也就是这种性质使指针不会回退,两个指针各扫一遍就可以原创 2021-08-06 18:44:07 · 557 阅读 · 2 评论 -
算法 - 离散化
这一节的离散化特指整数的保序离散化。1 是什么原创 2021-08-09 17:19:19 · 375 阅读 · 0 评论 -
算法 - 区间合并
从左到右,每出现一个新区间进行区间合并时,有以下三种情况:(假设上一个区间是[st ~ ed])上一个:|----------|这一个: |------|这种情况不需要改变。上一个:|----------|这一个: |------------|这种情况需要更新ed上一个:|----------|这一个: |--------|这种情况需要更新st和ed,并记录上一个区间。板子如下:typedef pair<int, int> PII;vector<PII&原创 2021-08-09 18:33:50 · 126 阅读 · 0 评论 -
算法 - 高精度
所有代码都是手敲的,有bug欢迎提出。虽然没人看本篇文章包括高精度加、减、乘、除。高精度加减的两个数都是高精度,高精度乘除是高精度 ×或÷ 低精度。一、预备知识——C++与STL入门(一)string做标记的是这个本文会用到的:(二)vector使用vector是因为有size()函数,遍历很方便,而普通的数组获得其长度较麻烦。(三)引用符&在后续的代码中,引用的使用目的是提高代码效率。这里先记住一点:当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高原创 2021-07-31 00:41:29 · 143 阅读 · 0 评论 -
算法 - 二分查找
在算法中用的比较多的查找算法是二分查找,在这里梳理一下思路。将来复习数据结构的话也会在这里补充。二分查找(一)是什么原创 2021-07-29 09:55:40 · 345 阅读 · 3 评论 -
算法 - 前缀和与差分
前缀和和差分是一对逆运算,先给出各自最大的作用:前缀和快速求出原数组中一段数的和(区间和)差分快速对原数组进行统一的操作(eg.某段区间全部+1)原创 2021-08-03 11:09:53 · 321 阅读 · 0 评论 -
算法 - 快速排序和归并排序
AcWing学习记录钱都花了不学也太亏了两种排序算法一 快排快排的思路:确定分界值(一般选择q[(l + r) / 2])双指针扫描递归处理左右两段注:1.一次快排的结果,就是比q[l + r >> 1]小的数都在左边,比q[l + r >> 1]大的数都在右边。根据这样的结果可以实现一个“分类“,记得大二数据结构的期末考题就是用O(nlog(n))的算法实现对给出的字母序列进行大小写字母划分。这道题的思想就是快排。2.双指针扫描的过程就是让 i 和 j 分原创 2021-07-27 11:27:55 · 187 阅读 · 0 评论 -
算法 - 位运算
当我翻博客时发现前面的题目没有题目链接实在是太伤了,从这篇开始加题目链接,之前的有时间就补上。这节主要介绍两种常用的位运算操作:一个整数n的二进制表示中第k位是什么:n >> k & 1返回整数x的二进制表示的最右一位1:x & -x 或 x & (-x + 1)1 整数n的二进制表示的第k位首先约定个位是第0位,找到第k位需要两步:先把第k位移到最右一位即n >> k&1合一起就是 n >> k & 1引原创 2021-08-06 12:57:07 · 237 阅读 · 0 评论