364. Nested List Weight Sum II
这个题做了一个多小时,好傻逼。
显而易见计算的话必须知道当前层是第几层,因为要乘权重,想要知道是第几层又必须知道最高是几层。。
用了好久是因为想ONE PASS,尝试过遍历的时候构建STACK,通过和顶端的距离来判定层数,但是其实最后POP的过程相当于又遍历了一次。而且STACK无法O(1) access,换成LIST需要手动来维持顺序。
最终放弃了,看答案。。发现都是先遍历一次得到最高权重。。。。。。仔细想想似乎1-PASS可以用MAP实现,但是每次发现新高权重,就必须更新以前所有的,貌似没必要1PASS。。。
如果不要求1PASS,先遍历算权重的话,这个题就很直白了。。
public class Solution
{
int depth;
public int depthSumInverse(List<NestedInteger> nestedList)
{
if(nestedList.size() == 0) return 0;
depth = getDepth(nestedList);
return helper(nestedList,1);
}
public int getDepth(List<NestedInteger> list)
{
int res = 1;
for(NestedInteger n: list)
if(!n.isInteger())
res = Math.max(res,getDepth(n.getList())+1);
return res;
}
public int helper(List<NestedInteger> list, int curLevel)
{
int res = 0;
for(NestedInteger i: list)
if(i.isInteger())
{
res += (depth+1-curLevel)*i.getInteger();
}
else
{
res +=helper(i.getList(),curLevel+1);
}
return res;
}
}
二刷。
这个题也有印象,一刷的时候尝试1-PASS的DFS,根本不可能。
BFS倒是可以,模拟level order traversal。很重要的一点就是要保留积累值,代码里我用的cum= =baby cum..cum..
重点是。。每到新的一层,返还结果都加一遍积累值,就可以满足权重weighted的关系。最早的我想法乘,DFS找到权重然后乘第几层,但是实际上这里反倒是返璞归真,加法最适合这种方式,而乘法根本难以表示这种关系。。
总共N层,最上面的一层作为积累制存在的N次,总共被加到res里N次,正好是这个题的意思。。
public class Solution {
public int depthSumInverse(List<NestedInteger> nestedList) {
if (nestedList.size() == 0) return 0;
int res = 0;
int cum = 0;
List<NestedInteger> tempList = new LinkedList<>();
while (true) {
for (NestedInteger i : nestedList) {
if (i.isInteger()) {
cum += i.getInteger();
} else {
tempList.addAll(i.getList());
}
}
res += cum;
if (tempList.size() == 0) {
return res;
} else {
nestedList = tempList;
tempList = new ArrayList<>();
}
}
}
}
所以结果是可以1-pass的。
DFS就先走一遍,找到最深的层数,然后递归并添加一个当前参数代表当前层数,层数差表示他出现的次数。
意淫完回头一看一刷,就是这么做的,我真是毫无长进。。。
364. Nested List Weight Sum II的更多相关文章
- [LeetCode] 364. Nested List Weight Sum II 嵌套链表权重和之二
Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...
- [leetcode]364. Nested List Weight Sum II嵌套列表加权和II
Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...
- LeetCode 364. Nested List Weight Sum II
原题链接在这里:https://leetcode.com/problems/nested-list-weight-sum-ii/description/ 题目: Given a nested list ...
- 364. Nested List Weight Sum II 大小反向的括号加权求和
[抄题]: Given a nested list of integers, return the sum of all integers in the list weighted by their ...
- 【LeetCode】364. Nested List Weight Sum II 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcode ...
- [LeetCode] Nested List Weight Sum II 嵌套链表权重和之二
Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...
- [LeetCode] 364. Nested List Weight Sum II_Medium tag:DFS
Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...
- Leetcode: Nested List Weight Sum II
Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...
- 嵌套列表的加权和 · Nested List Weight Sum
[抄题]: Given a nested list of integers, return the sum of all integers in the list weighted by their ...
随机推荐
- grub2 使用memdisk工具 启动任意iso
root@zhanghua-Inspiron-:/home/zhanghua# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda6 60G 12G 46G 21% / none ...
- nl命令很好,很强大
指令名称: nl - 显示文件的行数及内容 语法: nl [OPTION]... [FILE]... 说明: 将指定文件的内容附加上行数,显示到标准输出. 当没有指定文件名或使用 ...
- js中的prototye
前言 没事的时候写着js完,一般可能大家都知道这个属性吧,但是我还要说说,给一些不知道的人看看吧, 希望对你有帮助. 过程 以前在学c#的时候,老师最多用的就是Person这个类来开讲,我觉得是这个更 ...
- js 中特殊形势的函数-匿名函数的应用
javascript中的匿名函数,那什么叫做匿名函数? 匿名函数就是没有函数名称:演示代码: <script> function(x,y){ return x+y //这个就是一个匿名函数 ...
- 知识管理(knowledge Management)2
①找到生命的主轴 ②跨领域知识管理
- 学习Swift -- 构造器(下)
构造器(下) 可失败的构造器 如果一个类,结构体或枚举类型的对象,在构造自身的过程中有可能失败,则为其定义一个可失败构造器,是非常有必要的.这里所指的“失败”是指,如给构造器传入无效的参数值,或缺少某 ...
- Ipv6_Only-b
网上好多关于ipv6的资料,说半天ipv6是什么,怎么建立测试环境,,,可是没有看到具体的操作和解决的方案,这里,为大家提供一种方案,希望给大家带来帮助吧. 总的来说有三个方面需要进行检查和修改: 1 ...
- 常用machine learning数据集
ImageNet:非商业化的可视化大数据 截止到2015年5月1日,ImageNet数据库拥有超过1500万的图像. cifar10:10类物体识别数据集 数据集中包含60,000幅32*32图像,共 ...
- Coursera《machine learning》--(2)单变量线性回归(Linear Regression with One Variable)
本笔记为Coursera在线课程<Machine Learning>中的单变量线性回归章节的笔记. 2.1 模型表示 参考视频: 2 - 1 - Model Representation ...
- ireport常见问题
$V{PAGE_NUMBER} 表示当前是第几页 ,在text field 的 选项evaluation time选report是共几页,now表是当前页.页码可在ireport里直接设置. &quo ...