随笔分类 - leetcode-medium
摘要:输入一个矩阵,其中每一行递增,每一列递增,要求设计一个高效的算法判断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 输入一个字符串,代表一个表达式,包含的运算符有+,-,*,/ 本题没有包括括号,我的做法是把数字和+或者-压栈,继续遍历,如果遇到*或者/取出栈顶的数字和*或者/之后的数字进行计算然后再压栈,最后
阅读全文
摘要:输入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
阅读全文
摘要:输入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得到的
阅读全文
摘要:根据后缀表达式求值 过程:遍历后缀表达式 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也行,模拟这个过程就行了
阅读全文