09 2016 档案
摘要:输入n个不等式,求同时成立的不等式最多有多少个,数据范围n<=50,不等式右边的数据[0,1000] 分析:这题得转换思路来做,已知数据不超过1000,所以枚举0~1000以内的数,依次计算有多少个不等式满足,然后更新答案,也就是二重循环,1000*50 不过这题没有说一定是整数,如x>2,x<3,
阅读全文
摘要:三种颜色的球一次放入盒子,当数量差满足x,y,z时盒子中的球的个数清零,求盒子中出现数量最多的球的个数 数据范围:球的数量<=20000 分析:直接跟踪一遍放入球的过程,判断是否满足x,y,z,并更新答案 注意:在for循环中是当满足条件是更新答案,退出循环后还要更新一遍答案,这是最后一轮的盒子中剩
阅读全文
摘要:题目背景:男女相亲图,n个点m条边,数据范围n<=10000,m<=40000,判断输入的数据是否满足任意一条边的两个端点分别为男和女 分析:简单二分图,选择一个端点开始染色,我的做法是vis[i]=-1然后从i点出发的边的另一个端点都染成vis[j]=1,初始化memset(vis,0,sizeo
阅读全文
摘要:n*m的矩阵,再输入一个3*3的矩阵,找出在大的矩阵中这个3*3的矩阵的位置(3*3的矩阵可旋转),当有多个答案是,从上到下,从左到右的顺序输出 (3 <= N, M <= 200). 分析:数据范围不大,直接暴力,在n*m的矩阵中枚举3*3矩阵的右上点,然后比较这个3*3是否和输入的3*3的矩阵旋
阅读全文
摘要:小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序。100天过去了,小Ho查看自己的提交记录发现有N天因为贪玩忘记提交了。于是小Ho软磨硬泡、强忍着小Hi鄙视的眼神从小Hi那里要来M张"补提交卡"。每张"补提交卡"都可以补回一天的提交,将原本没有提交程序的一天变成
阅读全文
摘要:输入两个字符串,代表两个版本,比较大小 注意: 1.小数点个数不一定,如a=1.0.1,b=1 2.1.0==1
阅读全文
摘要:输入一个矩阵,其中每一行递增,每一列递增,要求设计一个高效的算法判断target是否在矩阵中 递增,所以二分,lgM*lgN 总体来说就是从右上角往下找到左下角
阅读全文
摘要:输入一个数组a[i],求b[i]=a[0]*a[1]*...a[i-1]*a[i+1]....a[n-1] 也就是除了它自己其余元素的乘积组成的数组,要求时间ON,空间O1,并且不能用除法 1.如果能用除法,可以先遍历一遍计算出总的乘积(不考虑溢出),然后在遍历一遍依次用乘积除以当前元素即可 2.不
阅读全文
摘要:输入一个数组,求出现次数超过n/3的元素这是求出现次数超过n/k的元素系列把数组以每组k个元素分成n/k,或者n/k+1组(当n%k!=0)时;既然要出现超过n/k次,假设这个元素存在,那么这个元素肯定至少在每组中出现一次,并且可能这样的元素有k-1个,因此还是用抵消法以求超过n/2的元素为例,既然
阅读全文
摘要:输入一个递增数组,没有重复的元素,输出数组的分段 For example, given [0,1,2,4,5,7], return ["0->2","4->5","7"] 已经有序了,所以直接遍历
阅读全文
摘要:和上题差不多http://www.cnblogs.com/0summer/p/5837634.html 输入一个字符串,代表一个表达式,包含的运算符有+,-,*,/ 本题没有包括括号,我的做法是把数字和+或者-压栈,继续遍历,如果遇到*或者/取出栈顶的数字和*或者/之后的数字进行计算然后再压栈,最后
阅读全文
摘要:输入一个字符串,包含数字或者+,-,(,),求这个表达式的结果 1.没有括号时顺序执行 2.有括号时先计算括号内的表达式 这里用一个栈来保存遇到括号(之前的表达式的结果,也就是说没遇到括号之前,按顺序正常执行设结果为x,遇到括号之后要先计算括号内的表达式,设结果为y,然后再把y拿出来和x顺序执行。因
阅读全文
摘要:输入01矩阵,求子矩阵为正方形,其中全为1的最大子矩阵的面积 矩阵dp,dp[i][j]表示以(i,j)为右下角的最大正方形子矩阵的长度 如果a[i][j]==1,dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1 要先处理第一行和第一列 时间N*M
阅读全文
摘要:直接看我的csdn吧http://blog.csdn.net/AC_0_summer/article/details/52413542
阅读全文
摘要:输入一个数组,求是否有abs(i-j)<=k,使得a[i]==a[j] 所以在判断两个元素是否相等时还要判断他们之间的距离,可以两重循环来做。 这里我用set<node>自定义数据类型和比较函数,按元素值来排序,如果元素值相同按下标来排序,之后遍历一遍set<node>即可。时间应该是set排序时间
阅读全文
摘要:输入n个从0,1,2~n中选择的n个数,每个数只选择一次,找出没有被选择的数 要求时间ON,空间O1 先求sum=n*(n+1)/2; 然后遍历数组,依次减去a[i],最后剩下的sum就是结果
阅读全文
摘要:也是找a[i]>=x+1,x代表已经合法的a[i]的个数。不过本题输入的数组已经是升序了。 直接从后往前遍历就行
阅读全文
摘要:输入一个数组,a[i]代表第i个篇论文有a[i]个引用,求n篇论文中引用数大于等于论文数的论文个数,即设当前有x篇论文满足要求,a[i]满足要求的条件是:a[i]>=x+1 递减排序,遍历一遍,当a[i]>=i+1时ans++,否则break,因为a[i]都不满足a[i]>=i+1,再往后遍历,a[
阅读全文
摘要:输入整数n,求完全平方数的和等于n中完全平方数用得最少的个数 直观想法搜索,先处理n以内的完全平方数,然后搜索,但效率不行,整数范围内的完全平方数有40000多个,用搜索的方法相当于求集合的子集个数,时间是2^n,肯定超时 正解:dp dp[i]表示完全平方数和等于i的最优解 dp[i]=min(d
阅读全文
摘要:给定一个派生类,这个派生类只继承了基类的next()和hasNext()方法,现在要求重写派生类的next(),hasNext()和peek()方法 peek()始终取next指针的后一个元素 分析: peek()取的是next指针的后一个元素,并且只有next()和hasNext()两个方法可用,
阅读全文
摘要:生态系统游戏,输入一个01矩阵,0代表死了,1代表活着,这是当前状态,求下一个状态: 1.当前格子活的: 1)周围活着的格子<2或者>3,则当前格子死 2)否则当前格子保持 2.当前格子死: 1)周围活着的格子==3,则当前格子活 2)否则当前格子保持 周围格子是指周围8个 如果不要求空间可以重新申
阅读全文
摘要:输入一个数组,其中除了两个数只出现一次外,其余的数均出现两次,找出只出现一次的数 一个系列http://www.cnblogs.com/0summer/p/5830714.html 这类题都可用multiset来做,时间ON,不过空间也是ON 既然题目要求空间O1,说明肯定有规律 本题同样位运算,设
阅读全文
摘要:输入一个数组,其中除了一个元素只出现一次外,其余元素都出现3次,找出只出现一次的元素 一个系列http://www.cnblogs.com/0summer/p/5829973.html 位运算。出现3次的元素,二进制位上的0或1也必然有3次,以二进制位为划分,求每个二进制位中1出现的次数,%3得到的
阅读全文
摘要:输入一个数组,其中每个元素都出现两次,只有一个元素出现一次,求这个只出现一次的元素,要求ON 第一种做法:用set<int> 保存元素,遍历数组,如果当前元素在set中存在则删除这个元素,否则插入这个元素,最后剩下的就是所求。空间ON 第二种做法:用位运算,异或,最后剩下的就是所求,时间ON,空间O
阅读全文
摘要:根据后缀表达式求值 过程:遍历后缀表达式 1.如果是运算数,入栈 2.如果是运算符,取出栈顶的两个运算数,计算,将结果入栈 最后取出栈顶元素即为结果。这里将string转换为数字用了<sstream>的istringstream,也可以用sscanf,但是参数是char str[]
阅读全文
摘要:输入一个数组和一个数s,求数组中的子数组的连续和>=s中最短的子数组 第一次的做法是: 先处理前缀和,然后二重循环枚举子数组,用前缀和sum[j]-sum[i-1]取得子数组的连续和,与s比较,更新答案。ON^2,超时 第二次做法: 既然ON^2超时,说明肯定是NlgN或者ON的做法,这题数组无序而
阅读全文
摘要:输入一个数组,a[i]表示第i位置的房子的价值,这些房子围成一个圈,相邻的两个房子不能同时抢,问能抢到的最大的价值 和这些题是一个系列http://blog.csdn.net/ac_0_summer/article/details/52348192 这里围成一个圈,那么对最后一个房子来说: 1.如果
阅读全文
摘要:输入一个数组,求第k大的数 利用快排,因为快排的每一轮递归使一个元素归位,所以判断当前归位的元素是否是第k个,若是,返回
阅读全文
摘要:有n个课程,输入一些二元组(x,y)表示先学习x必须先学习y,求根据输入的二元组的关系,能否修完所有课程 拓扑排序:选择一个入度为0的节点,删除该节点并且删除该节点所有的指出去的边,重复这个过程,知道没有入度为0的节点或者所有节点都被删除 bfs来做。不用bfs也行,模拟这个过程就行了
阅读全文