
leetcode
IcyFeather
这个作者很懒,什么都没留下…
展开
-
LeetCode 最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,null,-3原创 2020-08-15 14:55:04 · 160 阅读 · 0 评论 -
2 Keys Keyboard
题目其实就是求一个数分解出来的质因数的和为什么?首先我们复制粘贴不管怎么操作,A->B操作之后,B一定是A的倍数,这就证明了这个题的数可以通过一串数字的乘积的形式来表达假设这个数可以分解成(i-1)(j-1),由于(i-1)(j-1)>=1,化简得ij>=i+j,所以证明了如果能拆成乘积,一定要比和的形式更优。那么为什么要是质因数的乘积呢?当然是因为拆成质因数拆的更多,上面已经证明,拆的越多,结果越优,所以这个题只需要求分解后所有质因数的和就可以了int res=0;for(原创 2020-08-13 09:47:16 · 159 阅读 · 0 评论 -
Integer Break
leetcode integer break这里有一个很有意思的结论:当拆分一个数的时候,尽可能拆出来多的3,剩下的全是2就可以保证拆分出来数的乘积最大if(n<=3)return n-1;int res=1;if(n%3==1)res*=4,res-=4;if(n%3==2)res*=2,res-=2;while(n)res*=3,res-=3;return res;...原创 2020-08-13 09:27:00 · 99 阅读 · 0 评论 -
Bulb Switcher
leetcode bulb switcher分析一下题目题目关键是要求每个灯被按了多少次开关,而我们会发现,开关按了多少次和这个数有多少个因数相关,如12号灯:12的因数有1,2,3,4,6,12.于是在这些编号对应的轮时都会被按。我们发现一个规律,只有完全平方数的因数是奇数个,其余数由于因数分解时一定是一对一对的因数,所以因数都是偶数个。于是最后只有完全平方数的灯亮着,其余的都灭。答案就是简简单单的 sqrt(n) (自动向下取整)...原创 2020-08-13 09:13:58 · 111 阅读 · 0 评论 -
Poor Pigs - leetcode
这题用信息熵的知识算下界选k头猪,每头猪有五种状态,可以传递5个信息:0-15死亡15-30死亡30-45死亡45-60死亡不死亡k头猪可以表示5^k种状态必须让5^k>=n,才能保证解出来求满足这个式子的最小值即可,得出的k即为下界所以具体如何操作呢?由于有五种状态,我们选择五进制数对应0-n-1的每个数将0-n-1换成五进制数一共有k位,k位里面每位都对应一头猪如果数字为0,则第0分钟的时候喂,为1则在第15分钟喂,每头猪都这样喂对应的毒药假如1142(5)号为毒药原创 2020-08-12 17:06:10 · 294 阅读 · 0 评论 -
Minimum Moves to Equal
leetcode Minimum Moves to Equal问题邮局问题,找到中位数即可为什么要找中位数?可以首位两两配对,发现可以转换到数轴上,要想要绝对值最小,就是让点取到数轴上两点之间。当每组配对都是取到两点之间即可,容易看出中位数满足这个条件(不管是奇数个数还是偶数个数)代码用到STL库中nth_element函数nth_element(a,a+k,a+n),函数只是把下标为k的元素放在了正确位置,对其它元素并没有排序,当然k左边元素都小于等于它,右边元素都大于等于它,所以可以利用这个原创 2020-08-12 16:37:25 · 147 阅读 · 0 评论 -
Missing Number
要求:在线性时间内完成方法一:求和作差求出 0 到 n 的和,然后再计算原数组的和,作一个差就是缺失的数字了。由于数组里每个数字只被访问了一遍,故为线性时间。```cpppublic int missingNumber(int[] nums) { int sum1 = 0; for (int n : nums) { sum1 += n; } // 等差公式计算 1 到 n 的和 int sum2 = (1 + nums.length) *原创 2020-08-12 16:07:58 · 286 阅读 · 0 评论