![](https://img-blog.csdnimg.cn/direct/96adb0c77ab54770bcf6a3fea5afcab2.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法基础
文章平均质量分 70
一些基础的算法
柏箱
这个作者很懒,什么都没留下…
展开
-
算法基础——单调栈,单调队列
以求窗口内最大值为例,想象一个双端队列,从右边入队,每次入队与原来的队列中的最右边的元素比较大小,如果它的数值更大,那么就从右边pop掉原来队列中最右端的那个数,直到最左边的元素最大为止。第三个数为5,5从右往左靠近8,而5比8小,所以8被删除,7大于5,所以7也被删除。然后第二个数为8,想象高度为8的柱子从右往左靠近7,因为7比8小,所以输出7。第一个数为7,想象一个高度为7的柱子,它的左边没有任何数,所以直接输出-1。第四个数为6大于5,所以输出5。第五个数为7大于6,所以输出6。原创 2024-02-14 09:00:00 · 487 阅读 · 0 评论 -
算法基础——位运算,双指针,排序,二分
将所有位往左移或者往右移,过界会直接溢出,所以一般只对正数做这个操作,因为左移时最高一位的符号位会溢出。使用unique可以将重复的元素移动到最后面,再让下标指向最后面的第一个重复的位置的下标。在使用erase从这个下标开始删除到尾部,就可以得到一个排序去重的序列。与非类似,但非是一个逻辑运算,只要一个数大于0,对它!举例:3为00011,<<3为00110,变为6,乘以了2。位运算是以每一位的形式来进行的。sort是一个左闭右开的区间。1^0为1,0^1为1。只有两个都为1才是1。只要有一个为1则是1。原创 2024-02-03 20:24:21 · 584 阅读 · 0 评论 -
算法基础,一维,二维前缀和差分详解
我们用prefix[i]来表示从第一个动物开始直到第i个动物释放了魔法后算出来的总重量与未释放魔法时的总重量的偏移量。prefix[i][j]表示的是从a[1][1]到a[i][j]之间所有数的和。如果我们再让d[6]减1,就可以使得只有a[3]到a[5]加了1这样的操作。我们让d[3]加1,那么a[3],a[4],a[5]......都会加1。则d[i] = a[i] - a[i-1](i >= 2)prefix[3]的值就为a[1]+a[2]+a[3]那么prefix[2]的值就为a[1]+a[2]原创 2024-02-02 21:22:55 · 644 阅读 · 0 评论 -
算法基础——栈,优先队列,map,set,bitset
map和数组类似,如果说数组是值与值之间的对应,那么map就是key和value之间的对应,key和value的类型都是我们自己可以控制的,可以是字符串,也可以是int或者double类型的。可以用count返回1的个数,reset重新全部变为0,可以就把它当成一个bool数组用。内部不能访问 ,默认是大根堆永远能保证最顶端的那个最大,priority_queue。可以pop弹出堆顶,top访问堆顶,size访问元素个数,push推入。是一个有很多位的二进制数,支持位运算。注意:至多只进一次栈。原创 2024-02-05 09:00:00 · 498 阅读 · 0 评论