算法练习
近来
这个作者很懒,什么都没留下…
展开
-
dp背包问题总结
转自leetcode题解回答:[Jackie.YL]常见的背包问题分为三种:组合问题:如:给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。377. 组合总和 Ⅳ494. 目标和518. 零钱兑换 IItrue false问题如给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。139. 单词拆分416. 分割等和子集最大最小问题即给定背包容量与价值,怎样才能将装进背包的物品的价转载 2020-08-26 19:33:44 · 217 阅读 · 0 评论 -
拓扑排序 板子
转自:博客拓扑排序1.什么是拓扑排序对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任 意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。 无向图和有环的有向图没有拓扑排序拓扑排序其实就是离散上的偏序关系的一个应用转载 2020-08-23 10:31:26 · 274 阅读 · 0 评论 -
乘法逆元
原始链接:[https://blog.csdn.net/weixin_43872728/article/details/99687168?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159788598219725211921229%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159788598219725211921229&转载 2020-08-20 10:07:32 · 158 阅读 · 1 评论 -
中国剩余定理
原链:[https://blog.csdn.net/destiny1507/article/details/81751168?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159788511519724839249788%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159788511519724839249788&biz_id转载 2020-08-20 10:06:36 · 152 阅读 · 2 评论 -
扩展欧几里得
扩展欧几里得算法的最大用法就是用来计算二元一次方程的整数解。**贝祖定理:**即如果a、b是整数,那么一定存在整数x、y使得ax+by=gcd(a,b)。或者说二元一次方程有解的充要条件就是二元一次方程(ax + by = c)有解的充要条件就是 c 是 gcd(a, b) 的整数倍这时候使用扩展欧几里得就可以求得二元一次方程的一个解。当到达递归边界的时候,b==0,a=gcd(a,b) 这时可以观察出来这个式子的一个解:a1+b0=gcd(a,b),x=1,y=0,注意这时的a和b已经不是最开始的原创 2020-08-18 09:29:13 · 248 阅读 · 1 评论 -
暴力+格式转化+板子真题 蓝桥
暴力其实暴力迭代解题也是有技巧的,并不是无脑的,下面总结了几个个人感觉比较有技巧的暴力题。2018乘积尾零如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?5650 4542 3554 473 946 4114 3871 9073 90 43292758 7949 6113 5659 5245 7432 3051 4434 6704 35949937 1173 6866 3397 4759 7557 3070 2287 1453 98991486 5722 3135 11原创 2020-08-08 10:22:21 · 511 阅读 · 0 评论 -
dp-回溯-搜索-排序及其他算法-蓝桥杯真题算法总结
在这里总结一下从放暑假开始到现在断断续续刷蓝桥杯真题遇到的算法思路,从第十届一直倒着刷到第四届,总的来说蓝桥杯的出题思路在中等题搜索和回溯是一直在变少的,但是搜索的花样变得更多了,而且中等题中的暴力题也一直在减少,关于数论的题也同时在出现,对参赛学生的要求也是变高的,而对于前面的几道题来说同样的花样变得多了起来,越到后面的几届的蓝桥杯的简单题是需要你停下来动脑子想一下才能出思路的,就这样,最后一题暂且不谈。其实最重要的一步是要正确理解题,仔细认真即可。dp在真题当中动态规划还是比较少的,到现在为止只遇原创 2020-08-07 20:55:55 · 758 阅读 · 0 评论 -
经典回溯数独c++
这道题需要注意的其实是输入,或者说所有需要输入大量数据的题,在进行输入整型时,最好使用char或者sstream先转换一下在间接填入整型数组,这道题在我做的时候就因为这个原因卡死了,还有这道题除了回溯递归,需要注意的点其实是这其实并不同于以往我接触到的回溯题目搜索一个路径,这道题如果写成从上下左右想搜索路径一样的可能会因为某种原因出现如四个已填充的格子围住一个未填数的格子,这样就直接out了,所以说这个题只需要按照从左到右依次填充的,且在填充时进行检查即可你一定听说过“数独”游戏。如【图1.png】,玩原创 2020-08-06 22:17:35 · 377 阅读 · 0 评论 -
快速幂与矩阵快速幂简记+模板套用
学习链接:技巧模板快速幂快速幂模板代码:typedef long long ll;ll _power(ll a, int b, int p) { //计算(a^b)%p; ll ans = 1; while (b) { if (b & 1) //等价于b%2,判断b的奇偶性 ans = ans * a % p; //如果为奇数,证明该位为1,需要乘上a a = a * a % p; //计算a^(2^i)转载 2020-08-02 16:59:22 · 101 阅读 · 0 评论 -
最小生成树的Prim算法和Kruskal算法简记
**连通图:**在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图。**强连通图:**在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连通图。**连通网:**在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。**生成树:**一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n-1条边。一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一.原创 2020-07-31 17:17:46 · 116 阅读 · 0 评论 -
Hashtable的数据结构简记
与红黑树或者二叉平衡树相比这些树之类的数据结构都是从根节点开始寻找我们需要的值,而哈希表则是通过一种特殊的函数查找关键字key直接确定我们想要的寻找的值的具体位置也就是相对应的地址,不需要一个个得去比较从而提高效率。index=H(key)(H代表得是哈希函数)构造:通常来说一共有五种方法来构造哈希表:直接定址法数字分析法平方取中法折叠法除留余数法其中通常使用除留取余法,在这里只介绍除留取余法:H(key)=key MOD p (p<=m m为表长)很明显,如何选取p是个关键原创 2020-07-31 16:58:57 · 576 阅读 · 0 评论 -
红黑树算法简记
红黑树性质:原始链接:https://molu-acm.github.io/2019/10/31/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95-%E7%BA%A2%E9%BB%91%E6%A0%91/红黑树是每个节点都带有颜色属性的平衡二叉查找树 ,颜色为红色或黑色平衡二叉树的一般性质:一个二叉树中,任意节点的值要大于等于左子树所有节点的值,且要小于等于右边子树的所有节点的值。它是一棵空树或它的左右两个子树的高度差原创 2020-07-31 10:12:20 · 348 阅读 · 0 评论 -
(图论)最大流算法-7.29讲解
最大流算法网络流基础概念网络流在一个有向图G=(V,E)G=(V,E)中:有一个唯一的源点S(入度为00:出发点)有一个唯一的汇点T(出度为00:结束点)图中的每一条边都一个非负的权值,这个权值叫做容量c(u,v)c(u,v)满足上述条件的图GG称为网络流图,记为G=(V,E,C)G=(V,E,C)可以想象成,如果把每条边都看成一个管道,可以看成是水从源点S出发经过这些管道,最终流向汇点T,而每条管道有最大的容量。(地下排水管道)可行流流量:每条弧上给定一个实数f(u,v)f(u,v)原创 2020-07-29 20:19:19 · 9687 阅读 · 1 评论 -
c++ vector去重与不规则二维数组的方法
c++vector去重的两种方法:第一种使用set:#include <iostream>#include <vector>#include <set>using namespace std;int main(){ int myints[] = {1,2,3,1,1}; int len = sizeof(myints)/sizeof(int); vector<int> vec(myints, myints + len原创 2020-07-12 09:54:47 · 1654 阅读 · 0 评论 -
c++ lower_bound fill() upper_bound 函数
刷算法题中遇到的这两个函数:要注意的是lower_bound与upper_bound函数都是使用二分查找来实现的,且两个函数的返回值都是迭代器,也就是指针。fill()函数用来填充一个容器的值,如一维数组,vector,二维数组,下面给出了这三种的填充方法。lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。upper_bound(起始地址,结束地址,要查找的数值) 返回的是数值 最后一个 出现的位置。binary_search(起始地址,结束地址,要查找原创 2020-07-11 16:07:32 · 294 阅读 · 0 评论 -
并查集算法模板简记
并查集算法:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)内计算出试题需要的结果,只能用并查集来描述。并查集是一种树型的数据结构,用于处理原创 2020-07-11 13:32:59 · 156 阅读 · 0 评论 -
刷leetcode遇到的一些数据结构与特别的算法(学习笔记)
最近在GitHub看labuladong大佬的学习教程项目做了如下笔记(小声bb,其实是因为我看算法书有点看不下去了)1、动态规划框架#dp数组的核心思想就是使用空间来换取时间,所以要构建一个dp数组首先要看数组中存储的元素能不能穷举覆盖到所有的题中的可能状态。#认为最重要的就是尽量减少重叠的问题,来提高算法的效率。#重要的是明确dp数组所存数据的含义,要明确它,根据dp数组的定义想办法运用数学归纳法来对dp数组进行延伸,ps:重要的是还要明确初始化条件来初始化dp数组保证得到正确的结果,具体的实例原创 2020-07-07 09:18:35 · 180 阅读 · 0 评论 -
leetcodeN皇后问题c++
调试了好多次如下:#include<iostream>#include<vector>#include<string>using namespace std;int cnt = 0, te = 0;int bat[1000] = { 0 };vector<vector<string>> res;void output() { string init(te, '.'); vector<string> res_t原创 2020-07-06 21:46:08 · 145 阅读 · 0 评论 -
算法4.30
1、 最长回文子序列Longest Palindromic SubsequenceGiven a string s, find the longest palindromic subsequence’s length in s. You may assume that the maximum length of s is 1000.Example 1:Input:“bbbab”Outp...原创 2020-05-07 16:14:55 · 102 阅读 · 0 评论 -
算法4.25
1、Longest Increasing SubsequenceGiven an unsorted array of integers, find the length of longest increasing subsequence.Example:Input: [10,9,2,5,3,7,101,18]Output: 4Explanation: The longest incre...原创 2020-05-07 16:13:09 · 152 阅读 · 0 评论 -
算法,4.20
1、Remove K DigitsGiven a non-negative integer num represented as a string, remove k digits from the number so that the new number is the smallest possible.Note:The length of num is less than 10002 ...原创 2020-04-22 19:59:01 · 91 阅读 · 0 评论 -
算法,4.14
1、wiggle subsequenceA sequence of numbers is called a wiggle sequence if the differences between successive numbers strictly alternate between positive and negative. The first difference (if one exis...原创 2020-04-22 19:58:06 · 159 阅读 · 0 评论 -
算法,4.7
1、Sorted ColorsGiven an array with n objects colored red, white or blue, sort them in-place so that objects of the same color are adjacent, with the colors in the order red, white and blue.Here, we ...原创 2020-04-22 19:56:54 · 97 阅读 · 0 评论 -
算法,3.30
1、You are given a binary tree in which each node contains an integer value.Find the number of paths that sum to a given value.The path does not need to start or end at the root or a leaf, but it mus...原创 2020-04-22 19:55:46 · 117 阅读 · 0 评论 -
算法,3.23
1、Given a non-empty 2D array grid of 0’s and 1’s, an island is a group of 1’s (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surr...原创 2020-04-22 19:54:36 · 137 阅读 · 0 评论