![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
深夜面包
这个作者很懒,什么都没留下…
展开
-
单链表(链式向前星)
单链表算法时间复杂度:插入删除O(1),查找O(n)head指向的位置是头,-1的位置是尾部题目:单链表1、定义一个终止节点-1,开始head(头指针指向终止节点),idx为新节点的下标,该下标存放的是节点的相关信息。2、在头插入新节点,即在idx下标存放相关信息的值,然后新节点的下一位指向头节点所在的位置,头节点移动到当前新节点,新节点的下标+1。3、在第k个输入的数后面插入一个...原创 2020-04-24 11:15:09 · 240 阅读 · 0 评论 -
二维差分和三维差分
二维差分(差分与前缀和的下标都从1开始,避免出现越界)算法公式:在x1,y1,x2,y2,区间内+x就是sum[x1][y1]+=w、 sum[x2+1][y1]-=w、sum[x1][y2+1]-=w、sum[x2+1][y2+1]+=w。图解:想在黄色区间内+x,则要在sum[x1][y1]+=w但是 会影响绿色区间以及蓝色区间,因此需要减掉 sum[x2+1][y1]-=w、sum...原创 2020-04-16 11:17:47 · 1672 阅读 · 0 评论 -
差分算法
差法算法算法思路:给l,r区间内加上x,则表示为在l的位置+x,在r+1的位置上-x,再利用前缀和就能一次求出答案例题:差分#include<bits/stdc++.h>using namespace std;typedef long long LL;namespace IO{ inline LL read(){ LL o=0,f=1;char c...原创 2020-04-16 10:58:53 · 3152 阅读 · 0 评论 -
二维前缀和与三维前缀和
二维前缀和二维前缀和公式:sum[x2][y2]=b[x2][y2] + sum[x2][y1-1] + sum[x1-1][y2] - sum[x1-1][y1-1]算法思路:创立数组sum[ ][ ],sum[i][j]表示ij坐标左上角全部数的总和(包括i,j),求x1,y1,x2,y2这个区间内的数的和就为sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y...原创 2020-04-16 10:48:22 · 723 阅读 · 0 评论 -
一维前缀和算法
一维前缀和算法思路:建立sum数组,sum[i]表示前i个数的总和(包括第i个),求l-r区间中数的和,则表示为sum[r]-sum[l-1]。例题:前缀和#include<bits/stdc++.h>using namespace std;typedef long long LL;namespace IO{ inline LL read(){ LL...原创 2020-04-16 10:26:22 · 227 阅读 · 0 评论 -
高精度算法--大数除法
大数除法由于被除数很大超过了longlong或者unsigned longlong,就需要使用大数除法。例题:高精度除法算法思路:先用字符串把数存起来,然后把每一个数字存到数组中,用数组模拟除法进行运算#include<bits/stdc++.h>using namespace std;typedef long long LL;namespace IO{ inli...原创 2020-04-16 09:48:19 · 1781 阅读 · 0 评论 -
高精度算法--大数减法
大数减法由于相减的两个数答案很大超过了longlong或者unsigned longlong,就需要使用大数减法。例题:高精度减法算法思路:先用字符串把数存起来,然后把每一个数字存到数组中,然后比较数组,用大的减去小的。#include<bits/stdc++.h>using namespace std;typedef long long LL;namespace IO{...原创 2020-04-16 08:42:28 · 515 阅读 · 0 评论 -
高精度算法---大数乘法
大数加法由于相乘的两个数答案很大超过了longlong或者unsigned longlong,就需要使用大数加法。大数乘法分为大数乘大数和大数乘一个longlong内的数例题:高精度乘法(大数乘非大数)算法思路:先用字符串把数存起来,然后把每一个数字存到数组中,用数组模拟乘法进行运算//大数乘非大数与加法类似#include<bits/stdc++.h>using nam...原创 2020-04-14 11:59:17 · 627 阅读 · 0 评论 -
高精度算法---大数加法与大数压位
大数加法由于相加的两个数很大超过了longlong或者unsigned longlong,就需要使用大数加法。例题:高精度加法算法思路:先用字符串把数存起来,然后把每一个数字存到数组中,用数组模拟加法进行运算#include<bits/stdc++.h>using namespace std;typedef long long LL;namespace IO{ i...原创 2020-04-14 11:44:04 · 194 阅读 · 0 评论 -
浮点数二分算法
浮点数二分算法思想:与整数二分类似,差别在于循环条件,以及选取区间的时候不需要+1或者-1。代码模板double l=0,r=1e9; while(r-l>=1e-8){//循环条件:题目要求保留几位小数就往后延展两位,如保留6位小数 double mid=(l+r)/2; if(check(mid))r=mid;//根据check函数的不同,...原创 2020-04-14 11:25:01 · 279 阅读 · 0 评论 -
位运算和基于位运算的快速幂算法
位运算和快速幂(和)的应用& 与运算(按位与)在二进制中只有同一位置均为1时结果位才为1,否则为0!如:9 & 500001001 (9的二进制)00000101 (5的二进制)————————————00000001 (1的二进制)所以 9 & 5 = 1| 或运算 (按位或)在二进制中同一位有一个位为1,或同时为1时(只要不同时为0)结...原创 2019-07-01 17:43:57 · 261 阅读 · 0 评论 -
数字三角形——dp入门算法
题目: 7 3 8 8 1 0 2 7 4 44 5 2 6 5表示一个5行的数字三角形。假设给定一个n行数字三角形,计算出从三角形顶至底的一条路径,使该路径经过的数字总和最大。每一步只能由当前位置向左下或右下。输入格式第一行包含整数n,表示数字三角形的层数。接下来n行,每行包含若干整数,其中第 i 行表...原创 2019-10-28 20:25:34 · 546 阅读 · 0 评论 -
方格取数———dp思想
题目:方格取数拓展题:传纸条题目大意:给定一个矩阵每一个位置有一个权值,从左上角到右下角,要走两次,所到的点如果有权值就取出并变为,求所走路线取值和最大值。解题思路:dp算法 首先假设两条路同时出发,如果相遇在同一个各自就只需要取一次权值。 这里我们来考虑状态:k表示当前所在位置步数(下标和,即x+y),i1表示第一条路线所在位置的行,i2表示第二条路线当前所在位置的行,即dp[k][...原创 2019-10-31 09:28:20 · 241 阅读 · 0 评论 -
传纸条——dp算法(动态规划)
题目:传纸条(C语言网) 、 传纸条(洛谷)题目大意:原创 2019-10-31 11:31:54 · 424 阅读 · 0 评论 -
归并排序算法
归并排序算法虽然c++的STL中有sort算法,但是这个算法可以有效求出逆序对的问题时间复杂度上与sort函数和快速排序算法相差无几归并排序这个算法采用的是分而治之的思想,顾名思义就是把一个数组分开来处理,然后再合并唯一。时间复杂度:归并排序比快速排序稳定,因此它的时间复杂度为 O(nlogn),不管在什么情况下都是这种情况。...原创 2019-11-01 13:25:29 · 347 阅读 · 0 评论 -
逆序对——归并排序算法
前治知识点:归并排序题目链接:逆序对逆序对:在一个序列中,存在一个前面的数大于后面的数就成为逆序对(如2 1 4 3 中,2 1、4 3)用归并排序处理逆序对的时间复杂度:O(nlogn)大致上于归并排序的模板类似,但主要的差别在于:因为归并排序分为的是左右两个区间进行处理。所以,当左区间i所指向的元素大于右区间j指向的元素时,i与i之后的元素都与j所指向的元素成为逆序对。如这样一个...原创 2019-11-02 10:20:22 · 652 阅读 · 0 评论 -
区间众数、蒲公英(分块思想)
区间众数(分块思想)题目链接:蒲公英题目大意:给一个数组,q次在线查询,每次查询L-R中出现次数最多且最小的数。解题思路: 首先我们把这个数组分为k块来看待,然而每次查询的L-R则有几种可能,如下图...原创 2019-11-09 15:30:23 · 358 阅读 · 0 评论 -
合唱队形(DP算法入门)
合唱队形题意:给定一个数列,取出x个数,使得数列形为:T1<…<Ti>Ti+1>…>TK(1≤i≤K),求最小的x。分析:这题就是dp入门题,就是正着求一边最长上升子序列,反着求一边最长上升子序列,然后对于每一个点的两次上升序列求和,取一个最大值上代码...原创 2019-12-02 20:19:40 · 1329 阅读 · 0 评论 -
友好城市(dp算法)
友好城市题意:每一个桥有两个点,求最多所有不相交的桥的数。这个题也是最长上升子序列的应用题,我们只需要对一边的端点排序,再多另一边的端点求最长上升子序列即可,因为一边端点有序,另一边端点求最长上升子序列就可以保证这些桥不相交。自行脑补。这题需要用到最长上升子序列的优化,朴素只能得部分分朴素版代码#include<bits/stdc++.h>#define x first#...原创 2019-12-02 20:26:40 · 1152 阅读 · 1 评论 -
快速排序算法
快速排序(Quicksort)算法这个排序算法在面试题中基础遇到虽然STL中有sort函数(自行了解)可以快速解决,时间复杂度也相差无几,但是有些题目还是可以卡死sort排序。如:求n个数第k大值(1<n<=1e8)这个题目用sort是无法在一秒钟解决的。当然用快速排序也无法解决,但是稍微改变一下就能解决。所以今天我们来了解一下快速排序算法。快速排序算法的时间复杂度为...原创 2019-10-27 17:19:39 · 185 阅读 · 0 评论 -
二分算法
二分算法二分算法思想:是根据check函数是否合法来判断答案是在左边或者是右边。PS:check函数根据题目的意思去写。容易出现的问题:左右区间选择不好,导致死循环,或者答案不正确,以下给出两个模板只要check函数写的正确就不会出现问题。二分查找模板1当check当前答案mid是否合法,合法则答案可能是当前数也可能右边,否则答案在左边的做法。int bsearch_1(int l,...原创 2020-04-14 10:46:26 · 932 阅读 · 0 评论