自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 后缀数组

看到一篇后缀数组的文章,搬运过来。后缀数组

2021-04-19 19:51:26 40

原创 最小费用最大流

看到一篇好的文章最小费用最大流

2021-03-03 18:51:24 46 2

原创 快速数论变化

看到了一篇好的博客贴在这里了快速数论变化

2021-03-03 18:49:21 54 1

原创 二叉搜索树

二叉搜索树二叉搜索树(Binary Search Tree, BST)是一种常用的数据结构,在理想情况下,它可以以 的复杂度完成一系列修改和查询,包括:插入一个数删除一个数查询某数的排名(排名定义为比该数小的数的个数+1)查询指定排名的数求某数的前驱(前驱定义为小于该数,且最大的数)求某数的后继(后继定义为大于该数,且最小的数)维护一个有序的数组,配合二分查找,也可以实现这些操作,但插入和删除的复杂度是0(N) 。相对地,链表可以 0(1)插入和删除,但其他操作的复杂度不够优秀。二叉

2021-02-08 15:14:18 42

原创 数位dp

数位dp数位DP用于处理一些与数位有关的问题,主要是计数问题。我们从一道例题开始:HDU 2089Problem Description杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。不吉利的数字为所有含有4或62的号码。例如:62315 73418 88914都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号

2021-02-08 15:04:27 67

原创 字符串转化成整数

C 库函数 - atoi()C 标准库 - <stdlib.h>描述C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。声明下面是 atoi() 函数的声明。int atoi(const char *str)参数str – 要转换为整数的字符串。返回值该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。实例下面的实例演示了 atoi() 函数的用法。#include <stdi

2021-02-07 15:37:21 45

原创 连续子数组的最大和

题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).输入样例:[1,-2,3,10,-4,7,2,-5]输出样例:18说明:输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。我是在学习dp的时候找到了这一到最经典也适合初学者学习和使用dp的一道题方法一:动态规划状态定义:dp[i]表示以i结尾的连续子数组的最大和。所以

2021-02-01 12:41:00 31

原创 左旋转字符

题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它题目抽象:给定一字符串str,将str的[0…n)子串移动到[n…len)子串的后面。方法:使用标准库string::substr(size_type __pos, size_type __n); string

2021-02-01 12:33:05 43

原创 欧几里得算法

辗转相除法简介:辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。另一种求两数的最大公约数的方法是更相减损法。辗转相除法举例:求 10 ,25的最大公约数:25 / 10 = 2 ······510 / 5 = 2 ······0所

2021-01-21 22:09:27 55 1

原创 拓扑排序

拓扑排序拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现。简单地说,是在不破坏节点先后顺序的前提下,把DAG拉成一条链。如果以游戏中的科技树(虽然名字带树,其实常常不是树而只是DAG)举例,拓扑排序就是找到一种可能的点科技树的顺序。拓扑排序最经典的算法是Kahn算法。首先,先拿出所有入度为0的点排在前面,并在原图中将它们删除:这时有些点的入度减少了,于是再拿出当前所有入度为0的点放在已经排序的序列后面,然后删除:因为是有向无环图,而且删除操作不会产

2021-01-16 16:40:45 65

原创 如何掌握动态规划的套路

如何掌握动态规划的套路动态规划(Dynamic Programming),简称DP,这个名字给人的感觉是一种非常高大上非常复杂的算法,很多同学看到这个名字可能就会望而却步,在面试的时候也非常害怕被问到动态规划的题目。实际上,它并不是不是一种确定的算法,它是一种最优化的方法求解问题的思想或方法。它是由美国数学家贝尔曼(Bellman)在研究多阶段决策过程的优化问题时提出。不过,与之对应的还有一些与时间无关的静态规划,如:线性规划、非线性规划等。在运筹学中,动态规划是的非常重要的内容,在各个行业领域都有着广泛

2021-01-16 16:34:37 73

原创 最长上升子序列

最长上升子序列传统LIS问题对于长度为的序列,求其严格上升的子序列的长度。首先回顾一下最长上升子序列问题,有的解法和的贪心+二分解法。注意:此类问题要注意是否严格递增。板子//n^2做法int LIS(vector<int> &A){ int n = A.size(); if (n == 0) return 0; vector<int> dp(n, 0); for (int i = 0; i &

2021-01-16 16:27:58 51 1

原创

栈的应用栈在数据结构中是一个很重要的东西,掌握了栈的使用很多问题都可以很简单的解决。栈使用的原则是 “后进先出” 。栈就相当于一个瓶子我们往里面放东西,我们要将我们放进去的东西一层叠一层,所以我们每次要取出来的时候只能取栈顶端的元素。下面是一道很简单的一道题:uva514 铁轨我的思路是这就是一个判断出栈合法性的问题,出栈序列是否符合 “后进先出” 的原则需要注意的点:1)栈的应用用A来代表车厢序号,B代表target数组用来表示列车出站的序号顺序。B用来表示已经驶进B的车辆数。用

2021-01-08 23:08:30 79

原创 双端队列

双端队列双端队列(Deque:double ended queue)就是一个两端都是结尾的队列。队列的每一端都能够插入数据项和移除数据项。相对于普通队列,双端队列的入队和出队操作在两端都可进行。我们使用最经常使用的顺序结构来存储双端队列,为了节省空间。把它首尾相连。构成循环队列。而且规定left指向左端的第一个元素,right指向右端的下一个位置。那么队空的推断则是left=right,队满是(left-1+MAX)%MAX=right或者(right-left+MAX)%MAX==MAX。具体的东西

2021-01-08 22:42:02 56

原创 并查集

并查集的使用并查集主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。当然,这样的定义未免太过学术化,看完后恐怕不太能理解它具体有什么用。所以我们先来看看并查集最直接的一个应用场景:亲戚问题。(洛谷P1551)亲戚题目背景若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。题目描述规定:x和y是

2021-01-05 12:00:34 37

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除