![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 90
EndlessLethe
这个作者很懒,什么都没留下…
展开
-
树状数组详解
为什么要使用树状数组 比如说,我这里有一组数1, 2, 3, 2, …, k。我想知道第i到第j的和\(\mathop \sum \limits_{n = i}^j v[i]\)是多少? 朴素算法:for (int k = 0; k < n; k++) if (k >= i && k <= j) ans += v[k];类似这种的写法,虽然在某些点值改变时也依然可以计算(我们称这种问题为原创 2017-12-19 01:12:02 · 258 阅读 · 0 评论 -
旅行商问题之状压dp
问题背景旅行商问题背景就是,给定点集S,如何从固定起点s出发,找到最短的环游路线,注意每个城市(除s外)只能进过一次。POJ 3311 Hie with the Pie:http://poj.org/problem?id=3311swust 411: 售货员的难题:http://acm.swust.edu.cn/#/problem/411/-1解题思路定义dp[state][i]为已经过...原创 2019-09-07 11:35:59 · 570 阅读 · 1 评论 -
浅谈【剑指offer】滑动窗口的最大值
题目给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1...原创 2019-09-04 23:13:41 · 180 阅读 · 0 评论 -
深入理解KMP算法
写在最前面早在大二我就想写一篇KMP的总结,主要是因为大部分blog上的文章有着各种各样的不足:有的过于冗长,有的学习曲线太陡,而《挑战》和《算法竞赛》上相关部分都因为字符串相关的内容过多,KMP算法部分不甚详尽。但是当时没有发在blog上,因为感觉从next数组谈起的话,算法的推导总会很奇怪、不顺畅。时隔两年,花了两天时间,重新梳理了逻辑,缀字成文。这里是我的个人网站:https://...原创 2019-07-08 01:04:47 · 453 阅读 · 0 评论 -
浅析欧几里德算法 GCD和LCM
前言欧几里德算法作为有着非常简短的实现的算法,可能很多初学者(包括当时的我)都不求甚解。本文给出了GCD、LCM的性质,以及欧几里德算法的实现、证明和时间复杂度推导。...原创 2018-09-05 17:41:24 · 3055 阅读 · 0 评论 -
哈夫曼树的实现、应用和证明
[mathjax]这里是我的个人网站: https://endlesslethe.com/huffman-tree-tutorial.html 有更多总结分享,最新更新也只会发布在我的个人网站上。 排版也可能会更好看一点=v=什么是哈夫曼树给定n个权值,作为n个叶结点,构造一棵二叉树,而这棵树的特点是,有n个叶节点,叶节点的值为给定的权值。而内部节点的值为子树的权值和。 ...原创 2018-08-13 21:01:13 · 2923 阅读 · 2 评论 -
深入理解Bellman-Ford(SPFA)算法
这里是我的个人网站: https://endlesslethe.com/bellmanford-spfa-tutorial.html 有更多总结分享,最新更新也只会发布在我的个人网站上。 排版也可能会更好看一点=v= 前言Bellman-Ford算法,限于资料匮乏和时间复杂度比Dijkstra算法高,包括白书在内的很多资料,都没说得太明白。对于优化后的SPFA算法也没有提及。 ...原创 2018-07-27 09:59:36 · 15808 阅读 · 17 评论 -
单调队列和单调栈详解
这里是我的blog:有更多算法分享=v= https://endlesslethe.com/monotone-queue-and-stack-tutorial.html 前言 单调栈和单调队列算是栈和队列的高级应用吧,在公司面试中应该是不怎么会出现的(除非算法岗?)。因为原理比较简单,网络上的相关资料反而对于这两个东西说得都不甚清楚,尤其是它们的应用方法。最基本的两本中文算法书“紫书”和“白皮”都原创 2017-12-14 19:11:43 · 6199 阅读 · 3 评论 -
1308 音乐会的等待/诺诺的队列 单调栈 题解
题目地址:FJSDFZOJ 1308 音乐会的等待 题解: [SMOJ2116]诺诺的队列 音乐会的等待(诺诺的队列)AC代码:#include <bits/stdc++.h>using namespace::std;typedef long long ll;const int MAXN = 500000+50;struct M { ll x; ll len;} x[MAX原创 2017-12-13 22:11:58 · 513 阅读 · 0 评论 -
FZU 1894 志愿者选拔 单调队列 题解
单调栈模板题#include <bits/stdc++.h>using namespace::std;const int MAXN = 1000000 + 50;int mq[MAXN], q[MAXN];int T, x, index, front, r, l;char input[10];int main() { ios_base::sync_with_stdio(0);cin.t原创 2017-12-13 19:34:36 · 567 阅读 · 0 评论 -
poj 2796 Feel Good 单调栈题解
单调栈模板题#include <bits/stdc++.h>using namespace::std;typedef long long ll;const ll MAXN = 100000+50;ll ms[MAXN], r;ll L[MAXN], R[MAXN];ll n, pos, maxNum, x[MAXN];ll sum[MAXN];int main() { ios_b原创 2017-12-13 19:28:35 · 662 阅读 · 0 评论 -
深入理解归并排序——从归并排序到CDQ分治、归并树
归并排序首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。//将有序数组a[]和b[]合并到c[]中 void merge(int a[], int n, int b[], int m, int c[]) { int i, j, k; i = j = k ...原创 2019-09-21 00:14:31 · 717 阅读 · 0 评论