自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 学习安卓中遇到的问题记录

1 获取string.xml文件里的值String itemName=(String) this.getResources().getText(R.string.item_name);如果直接引用R.string.item_name,返回的结果是一个长整数

2020-11-29 14:08:12 145 1

原创 PAT 甲级 题目简要记录(3)

1101 Quick Sort题目大意:给出一个含N个不同数的序列,该序列是某趟快速排序的中间结果,求哪些数可能是该趟的基准数据pivot解题思路:题目等价于求哪些数满足:左边区间的数均小于它,右边区间的数均大于它这题关键在于跑测试数据容易超时题目再等价于求哪些数满足:大于它左边区间的最大值(maxArr[i]),小于它右边区间的最小值(minArr[i])这样就可以从暴力代码的复杂度O(n^2)降到O(n)// 编程关键的代码段int minArr[MAXN]; // [

2021-10-03 14:13:39 944

原创 二部图的判断

1 二部图基础二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。二部图2 染色法判断二部图先找到一个没被染色的节点u,把它染上一种颜色 之后遍历所有与它相连的节点v,如果节点v已被染色并且颜色和节点u一样,那么就失败了(即该图不是二部图) 如果这个节点v没有被染色,先...

2021-08-31 10:47:17 5745

原创 树状数组(BIT,binary indexed tree)

1 lowbit运算2 树状数组2.1 需解决的问题设计函数getSum(x),返回前x个数之和A[1]+......+A[x]。 设计函数update(x, v),实现将第x个数加上一个数v的功能,即A[x]+=v。2.2 树状数组树状数组 C[i] 其实仍然是一个数组,是一个用来记录和的数组,下标必须从1开始,它存放的是在i号位之前(含i号位,下同)lowbit(i)个整数之和。(并不是前i个整数之和)树状数组定义图2.3 树状数组如何实现g...

2021-08-22 11:12:42 175

原创 动态规划——DAG最长路

DAG:有向无环图1 求整个DAG中的最长路径问题描述:给定一个有向无环图,求解整个图的所有路径中权值之和最大的那条。解题采用动态规划+递归的方法,令dp[i]表示从i号顶点出发能获得的最长路径长度。需要按照拓扑逆序求解dp数组(即从没有后继结点的结点开始计算),借助递归策略实现拓扑逆序的同等效果dp[i] = max{dp[j]+length[i-->j]},其中j是i的后继结点// dp[i]表示从i号顶点出发能获得的最长路径长度, 初始化为0int DP(int

2021-08-20 19:49:32 1033

原创 动态规划——最长回文子串

问题描述给出一个字符串S,求S的最长回文子串的长度。状态转移思路令dp[i][j]表示S[i]至S[j]所表示的子串是否是回文子串,是则为1,不是则为0。这样根据S[i]是否等于S[j],可以把转移情况分为两类:若S[i]==S[j],那么只要S[i+1]至S[j-1]是回文子串,S[i]至S[j]就是回文子串;反之则不是。 若S[i]!=S[j],那么S[i]至S[j]一定不是回文子串。由此可以写出状态转移方程:边界:dp[i][i]=1,dp[i][i+1]=(S[i]==S[i

2021-08-19 16:59:02 193

原创 堆(定义+基本操作+堆排序)

堆是一棵完全二叉树,树中每个结点的值都不小于(或者不大于)其左右孩子结点的值。其中,如果父亲结点的值大于或等于孩子结点的值,那么这样的堆称为大顶堆;如果父亲结点的值小于或等于孩子结点的值,那么这样的堆称为小顶堆。堆一般用于优先队列的实现,而优先队列默认情况下使用的是大顶堆。此处的讨论以大顶堆为例。向下调整:总是将当前结点V与它的左右孩子比较(如果有的话),假如孩子中存在权值比结点V的权值大的,就将其中权值最大的那个孩子结点与结点V交换;交换完毕后继续让结点V和孩子比较,直到结点V的孩子的权值都比结点

2021-08-18 14:24:53 257

原创 平衡二叉树(AVL树)

AVL树仍然是一棵二叉查找树,只是在其基础上增加了“平衡”的要求。所谓平衡是指,对AVL树的任意结点来说,其左子树与右子树的高度之差的绝对值不超过1,其中左子树与右子树的高度之差称为该结点的平衡因子。假设现在已有一棵平衡二叉树,那么可以预见,在往其中插入一个结点时,一定会有结点的平衡因子发生变化,此时可能会有结点的平衡因子的绝对值大于1(这些平衡因子只可能是2或者-2),这样以该结点为根结点的子树就是失衡的,需要进行调整。可以证明,只要把最靠近插入结点的失衡结点调整到正常,路径上的所有结点就都会平衡。

2021-08-18 09:47:28 1028

原创 静态链表——相关题目

静态链表的实现原理是hash,即通过建立一个结构体数组,并令数组的下标直接表示结点的地址,来达到直接访问数组中的元素就能访问结点的效果。例题1 PAT A1032(推荐用谷歌浏览器打开,ie浏览器会出现兼容性问题)#include <cstdio>using namespace std;const int MAXN=1e5+1;struct Node { char data; int next; int vis; Node():ne...

2021-08-17 18:12:21 172

原创 题目——PAT A1043(二叉排序树)

题目链接给出N个正整数来作为一棵二叉排序树的结点插入顺序,问:这串序列是否是该二叉排序树的先序序列或是该二叉排序树的镜像树的先序序列。所谓镜像树是指交换二叉排序树的所有结点的左右子树而形成的树(也即左子树所有结点数据域大于或等于根结点,而根结点数据域小于右子树所有结点的数据域)。如果是,则输出YES,并输出对应的树的后序序列;否则,输出NO。解题大致思路:二叉排序树的中序序列M1是N个正整数的非递减序列 二叉排序树的镜像树的中序序列M2是N个正整数的非递增序列...

2021-08-15 11:12:14 324

原创 题目——PAT A1053(从树的角度看DFS)

题目链接#include <iostream>#include <cstdio>#include <queue>#include <vector>using namespace std;const int MAXN = 101;struct TreeNode { int weight; vector<int> children; // 优先将ID值较大的子结点放在前面} tree[MAXN];..

2021-08-14 19:13:41 106

原创 题目——PAT1060 Are They Equal(有关string的操作)

题目链接#include <iostream>#include <cstdio>#include <string>using namespace std;// 返回str对应的科学计数法形式0.x1x2x3... * 10^k中,x1x2x3...部分string getBodyLevel(string str,int &level) { int len = str.size(); int posDot ...

2021-08-12 17:32:45 77

原创 数学问题——组合数

1 求n!中有多少个质因子p1.1 以10!中质因子2的个数为例标题标题1.2 结论2 组合数的计算

2021-08-12 14:27:30 277

原创 数学问题——扩展欧几里得算法

1 扩展欧几里得算法(ax+by=gcd(a,b)的求解)1.1 问题描述给定两个非零整数 a和 b ,求一组整数解 (x, y),使得ax+by=gcd(a,b)成立,其中gcd(a,b)表示a和b的最大公约数。1.2 求出一组解int gcd(int a,int b){ if(b==0) return a; else return gcd(b, a%b);}在gcd算法中,到达递归边界时,a变量存放的是gcd,b变量存放的是0,显然 a*1+b*...

2021-08-12 10:02:08 364

原创 数学问题——分数的四则运算

1 分数的表示与化简1.1 分数的表示struct Fraction{ // 分数 long long up; // 分子 long long down; // 分母};其中规定:使用down为非负数。若分数为负,那么令分子up为负即可。 若该分数恰好为0,那么规定其分子为0,分母为1。 分子和分母没有除了1以外的公约数。1.2 分数的化简化简的目的是使Fraction变量满足分数表示的三项规定,化简的步骤因而分如下三步:若分母down为负数,那么令

2021-08-11 15:40:00 212

原创 做题技巧——杂

1 打表在程序中一次性计算出所有需要用到的结果,之后查询直接取这些结果。(空间换时间) 在程序B中分一次或多次计算出所有需要用到的结果,手工把结果写在程序A的数组中,然后在程序A中就可以直接使用这些结果。(空间换时间) 对于一些感觉不会做的题目,先用暴力程序计算小范围数据的结果,然后找规律,也许能发现一些蛛丝马迹。(辅助题解分析)2 活用递推关系3 随机选择算法针对问题:如何从一个无序数组中求出第K大的数(为了简化讨论,假设数组中的数各不相同)若采用排序的方法,也能解题...

2021-08-11 14:31:04 56

原创 two pointers 思想

1 什么是two pointerstwo pointers是一种编程思想,利用问题本身与序列的特性,使用两个下标i、j对序列进行扫描(可同向扫描,也可以反向扫描)2 递增序列合并问题问题描述:假设有两个递增序列A和B,要求将它们合并为一个递增序列C。利用two pointers解题思路:设置两个下标i和j,初值均为0,表示分别指向序列A和序列B的第一个元素,然后根据A[i]与B[j]的大小来决定哪一个放入序列C。循环进行如下判断:若A[i] < B[j],说明A[i]是当前序列

2021-08-11 11:44:50 138

原创 贪心——部分笔记

贪心策略证明的一般思路:反证法+数学归纳法(即假设策略不能导致最优解,然后通过一系列推到来得到矛盾,以此证明是最优的,最后用数学归纳法保证全局最优)贪心的证明往往比贪心本身更难...

2021-08-10 14:03:13 90

原创 c++部分笔记

输出格式%.mf可以让浮点数保留m位小数输出,这个“保留”使用的是精度的“四舍六入五成双”规则。若题目没有明确要求“四舍五入”,则就用这个格式来输出;若明确要求,则需要用到round函数。long long类型赋初始值若初值大于2^31-1,则需要在初值后面加LL,否则会编译错误。运算符优先级取模运算符的优先级 等于 除法运算符位运算符优先级没有算数运算符高%与/的输出方式math.h库三角函数数组申请空间的方式memset和fill.

2021-08-05 18:23:23 456

原创 字符串匹配——KMP算法 & regex库

例题1

2021-08-04 18:24:06 201

原创 stack应用——简单计算器

题目链接自己的解题思路(略显麻烦)准备两个堆栈分别存放运算符(op)和待操作的数字(number)。先将表达式以string类型保存到str变量里,再以空格为间隔符,把多个str的子串存在string数组arr中,遍历数组arr。若元素是一个数字:op的头部是*或者/运算符的话,就执行该运算操作;反之,则把该元素添加到number堆栈中若元素是一个运算符:若op不为空且该元素的level为1,就先执行op头部的运算操作,再将该元素添加到op堆栈...

2021-08-04 15:28:59 387

原创 题目——奥运排序问题(若题目求排名而不是整个有序序列,那么不一定需要用到排序算法)

题目链接自己写的代码#include <iostream>#include <algorithm>using namespace std;const int MAXN=1001;struct Country { int label; int gold; int medal; float goldRate; float medalRate; int Rank[4]; Country() {} Countr

2021-08-03 15:16:11 85

原创 题目——找位置(字符串、查找)

题目链接这题主要就是输出的格式比较繁琐另外一个需要注意的是,尽量用string类型来操作数据,而不是char,char类型容易出错。#include <iostream>#include <algorithm>#include <algorithm>using namespace std;struct Pos{ // 存储字母,及其 在字符串中的位置 string c; // 这里用string 类型不容易出错 int pos;

2021-08-01 18:32:32 203

原创 二分法——学习记录

bool BinarySearch(int arr[],int n,int target){ int left=0,right=n-1,mid; while(left<=right){ mid=left+(right-left)/2; if(arr[mid]==target) return true; if(arr[mid]<target) left = mid+1; else right = mid-1; .

2021-08-01 17:06:35 236

原创 题目——坠落的蚂蚁

题目链接解题思路以蚂蚁A为参考,其他蚂蚁可以分为以下四种状态:初始位置在A左边,向左爬 初始位置在A左边,向右爬 初始位置在A右边,向左爬 初始位置在A右边,向右爬不难发现,第1、4两种情况的蚂蚁,永远不会与蚂蚁A碰头,蚂蚁A的坠落不受它们的影响,因而这些蚂蚁的信息在解题过程中是不需要的,要去除掉。经过该处理后:蚂蚁A的左边,所有蚂蚁向右爬;蚂蚁A的右边,所有蚂蚁向右爬。假设如下序列:B1, B2, ... , Bm, A, C1, C2, ... , Cn,根据m和n的值,有如下三

2021-08-01 15:09:33 163

原创 题目——路径打印

题目链接#include <iostream>#include <vector>#include <algorithm>using namespace std;const int MAXN=11;string blank(int n){ // 返回长度为n的、由空格组成的字符串 string res=""; while(n--) res+=" "; return res;}int main() { in

2021-07-31 19:01:56 106

原创 基础——日期问题

例题1例题2例题3例题4例题5例题6代码#include <iostream>#include <cstdio>using namespace std;int arr[4][12]= { {31,28,31,30,31,30,31,31,30,31,30,31}, // 平年 每月天数 {31,29,31,30,31,30,31,31,30,31,30,31}, // 闰年 每月天数 {31,59,90,120,151,

2021-07-31 14:12:20 99

原创 模拟题记录

题目链接做题思路这道题刚拿到的时候,脑子确实是蒙了好段时间,经过好些思考,得出以下的思路:模板template的大小是N*N的正方形 若图片A是模板放大了level倍的结果,则图片A也是一个正方形,边长为N^level 若图片B是模板放大了level+1倍的结果,则图片B也是一个正方形,边长为N^(level+1) 图片B完全可以在图片A的基础上经过变换得到,变换的过程如下:遍历图片A的每个点(x0,y0),若该点是一个空格,则图片B的区域M(其中M是一个与template大小一致的区域,

2021-07-30 18:50:01 73

原创 数学问题——高精度整数

例题例题1例题2例题3例题4代码模板#include <iostream>#include <cstring>using namespace std;const int MAXN = 10000;// 适用于正整数的相关操作// 已经测试过加法,乘法,输入,输出struct BigInteger { int digit[MAXN]; int length; BigInteger(); BigInteger(int

2021-07-30 14:07:56 80

原创 数学问题——快速幂&模运算规律&矩阵快速幂

模运算规律运算规则模运算与基本四则运算有些相似,但是除法例外。其规则如下:(a + b) % p = (a % p + b % p) % p (1)(a – b) % p = (a % p – b % p) % p (2)(a * b) % p = (a % p * b % p) % p (3)(a^b) % p = ((a % p)^b) % p (4)结合律:((a+b) % p + c) % p = (a + (b+c) % p) % p (5)((ab) %.

2021-07-29 15:39:38 651

原创 数学问题——素数筛选法&约数个数定理

例题——约数的个数代码一(时间复杂度较高)#include <iostream>#include <cmath>using namespace std;int main() { int N,num; while(cin>>N){ while(N--){ cin>>num; int bound = sqrt(num),ans=0; for(in

2021-07-28 18:52:50 99

原创 数学问题——进制转换

例题1——进制转换(十进制---->二进制)题目描述:将超大的十进制正整数,转化为对应的二进制形式。解题思路:这题主要的难点,是十进制数的范围很大。解题阶段一用字符串形式来存储数字,不断进行对2取模和对2整除运算,以期求出结果。但是提交代码进行在线测试的时候,出现超时的报错。我当时以为这种算法本身就比较费时,就没有再深究代码bug,换了其他的思路。然而后面发现,代码的strDiv函数存在各种漏洞,详细请见解题阶段三。#inc...

2021-07-27 18:25:55 451

原创 动态规划——题目:整数拆分

题目链接自己的思考过程这道题我没有做出来,在讲正确解法之前,这里记录一下我的思路偏差。我是先按着题目的拆分思路,把N拆分为多个1、多个1和2、多个1和2和4........ 然后发现N若为奇数,则f(N) = f(N-1),因为奇数不管怎么样都会有个1多余出来。 对于N为偶数的情况,我就一直在思考怎么样让f(N) = F(f(N-2)),很明显,这个关系F我没有找出来。因为N-(N-2) = 2,所以我分了两个可能,一个是(N-2)+2,另一个是(N-2)+1+1。若先取(N-2)+2的情况

2021-07-24 17:26:08 297

原创 动态规划——划分数问题

例题——放苹果我自己读完题开始想思路时,边界条件能考虑到,并且也考虑到如果过盘子的数量大于苹果的数量,那么这种情况的放置方法总数与“盘子数量等于苹果数量”是相等的。不过真的是没想出来最核心的状态转移方程,虽然代码通过了牛客网的在线测试,但是这个代码的复杂度比真正标准的状态转移要高,应该是有些冗余计算。自己写的代码:#include <iostream>using namespace std;int main(){ int dp[11]...

2021-07-24 12:04:04 314

原创 conda安装过程中出现的问题

问题:Anaconda: An unexpected error has occurred. Conda has prepared the above report.解决:conda clean -i问题:To search for alternate channels that may provide the conda package you're looking for.......解决:原来>>conda install 包,改用>&g...

2021-07-24 10:28:43 363

原创 安装mmdetection出现的问题记录

问题:AT_CHECK找不到标识符暂时的一个解决办法:查了很多资料,网上相关的解决办法实在比较少,所幸找到一个相对可行的。pytorch版本在1.5及以上的,不再使用AT_CHECK,而是使用TORCH_CHECK。所以在mmdetection源码中,把所有用到AT_CHECK的地方全部换为TORCH_CHECK。被我修改的文件有如下几个:nms_cuda.cpp roi_align_cuda.cpp roi_poo...

2021-07-24 10:23:31 550 2

原创 动态规划——多重背包

基本知识关键在于k的拆分 !!!例题——珍惜现在,感恩生活代码#include <iostream>using namespace std;const int MAXN = 10000;int dp[MAXN];int value[MAXN]; // 分解后物品价值int weight[MAXN]; // 分解后物品质量int main(){ int caseNumber; cin>>caseNumber; while(c

2021-07-23 16:22:49 48

原创 动态规划——完全背包

基础知识点首先设置一个二维数组dp[][],令dp[i][j]表示前i个物品装进容量为j的背包能获得的最大价值。通过设置这么一个二维数组,dp[n][m]的值就是完全背包问题的解。 只考虑第i件物品时,可将情况分为 是否放入第i件物品 两种:对于容量为j的背包,如果不放入第i件物品,那么这个问题就转换成将前i-1个物品放入容量为j的背包的问题,即dp[i][j] = dp[i-1][j]。 对于容量为j的背包,如果放入第i件物品,那么当前背包的容量就变成了j...

2021-07-23 14:15:19 133

原创 动态规划——0-1背包

基础知识点首先设置一个二维数组dp[][],令dp[i][j]表示前i个物品装进容量为j的背包能获得的最大价值。通过设置这么一个二维数组,dp[n][m]的值就是0-1背包问题的解。只考虑第i件物品时,可将情况分为是否放入第i件物品 两种:对于容量为j的背包,如果不放入第i件物品,那么这个问题就转换成将前i-1个物品放入容量为j的背包的问题,即dp[i][j] = dp[i-1][j]。 对于容量为j的背包,如果放入第i件物品,那么当前背包的容量就变成了...

2021-07-23 11:34:35 126

原创 动态规划——最长公共子序列

基础知识例题——Common Subsequence、Coincidence代码#include <iostream>#include <cstring>using namespace std;const int MAXN = 1001;int dp[MAXN][MAXN];int main(){ string str1,str2; while(cin>>str1>>str2){ int len1=s

2021-07-22 18:13:23 47

空空如也

空空如也

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

TA关注的人

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