摘要: 1 class Solution { 2 public: 3 vector countBits(int num) { 4 vector res (num + 1, 0); 5 for(int i = 1; i < num + 1; ++i){ 6 res[i] = res[i / 2] + i % 2; 7 ... 阅读全文
posted @ 2017-06-14 02:34 co0oder 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 对于每个数字i,分为j和i-j两个部分,两个部分分别可以选择继续拆分和不拆分。 阅读全文
posted @ 2017-06-14 02:23 co0oder 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 数组中每个元素都要用到,取正或负,全部的和是否能得到target。 数学问题,取正的集合之和为P,取负的为N。 P - N = target P - N + P + N = target + P + N 2*P = target + sum P = (target + sum) / 2 target 阅读全文
posted @ 2017-06-11 19:34 co0oder 阅读(78) 评论(0) 推荐(0) 编辑
摘要: dp[i]表示i是否能得到,初始化dp[0]为true。 遍历数组每个元素(num),对于dp中每个元素(dp[j]),如果为true,则dp[j + num] = true。 注意j必须从尾到头遍历,不然[1,2,5]会认为是true。(即每个元素num会重复累加) 阅读全文
posted @ 2017-06-11 19:20 co0oder 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 先自己在纸上画棵树,发现可以用stack实现迭代版的后序遍历,最开始先把root压入栈。另外维护一个栈,记录对应节点出栈的次数,如果是1,表明左右节点已输出,就输出;如果为0,说明左右节点还未压入栈,就把次数加1,且把左右节点压入栈。 阅读全文
posted @ 2016-04-14 20:43 co0oder 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 水题,把每一层的节点存入queue中,val存入vector,vector再存入stack(因为最后结果的顺序是最底层在最前面)。 耗时较多,留坑。 阅读全文
posted @ 2016-04-12 20:49 co0oder 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 一开始以为不直接连接的话就考虑隔层加钱,偶数层和奇数层分开算得两个结果,但是输入为[4,1,null,2,null,null,3]时最大值为4+3 = 7,4是第0层,3是3层。 因此要以节点为对象,而不是层。每个节点的情况分两种,抢和不抢,如果抢当前节点,那么左右节点不能抢;如果不抢,那么当前节点 阅读全文
posted @ 2016-04-12 20:38 co0oder 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 留坑 阅读全文
posted @ 2016-04-05 21:43 co0oder 阅读(168) 评论(0) 推荐(0) 编辑
摘要: ver0: 用递归,首先判断整个高度是否单调递增,如果是的话,从第一个高度开始,假设该高度是最终最大矩形的高度,得到面积,一直遍历到最后一个高度,这样就得出了最大面积;如果不是单调递增,则先得到最小高度的位置,根据递归得到最小高度左边的最大矩形面积,再得到最小高度右边的最大矩形面积,又得到以最小高度 阅读全文
posted @ 2016-04-05 21:15 co0oder 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 首先说说最初的但是不正确的思路,stk存值,初始化为输入数组的第一位。从左往右读入数组每一位,如果height[i]>stk.top(),说明stk.top()无法蓄水,pop掉,替换为height[i];如果height[i]<=stk.top(),那么从i开始遍历,直到找到大于等于stk.top 阅读全文
posted @ 2016-04-04 23:46 co0oder 阅读(135) 评论(0) 推荐(0) 编辑