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就先走一遍,找到最深的层数,然后递归并添加一个当前参数代表当前层数,层数差表示他出现的次数。
意淫完回头一看一刷,就是这么做的,我真是毫无长进。。。
转载于:https://www.cnblogs.com/reboot329/p/5944469.html
364. Nested List Weight Sum II相关推荐
- 364. Nested List Weight SumII
题目: Given a nested list of integers, return the sum of all integers in the list weighted by their de ...
- LeetCode 167. Two Sum II - Input array is sorted--Python解法
题目地址:Two Sum II - Input array is sorted - LeetCode Given an array of integers that is already sorted ...
- Digit Sum II( ABC044ARC060)
问题 G: Digit Sum II 时间限制: 1 Sec 内存限制: 128 MB 提交: 36 解决: 11 [提交][状态][讨论版][命题人:admin] 题目描述 For intege ...
- [LeetCode]113.Path Sum II
[题目] Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the giv ...
- Lintcode: k Sum II
Given n unique integers, number k (1<=k<=n) and target. Find all possible k integers where the ...
- LeetCode_Path Sum II
一.题目 Path Sum II Total Accepted: 46778 Total Submissions: 175830My Submissions Given a binary tree a ...
- 113. Path Sum II
/** 113. Path Sum II * 11.18 By Mingyang* 典型的backtracking,不过注意,这里的值可能是负数,所以不能用sum小于0来做任何判断* 1.长度标准:无 ...
- leetcode 112. Path Sum, 113. Path Sum II | 112,113. 路径总和 I, II(Java)
题目 https://leetcode.com/problems/path-sum/ https://leetcode.com/problems/path-sum-ii/ 题解 简单的遍历二叉树,不解 ...
- Leetcode: mimimum depth of tree, path sum, path sum II
思路: 简单搜索 总结: dfs 框架 1. 需要打印路径. 在 dfs 函数中假如 vector 变量, 不用 & 修饰的话就不需要 undo 2. 不需要打印路径, 可设置全局变量 ans ...
最新文章
- springmvc 将post转换为delete,put
- Python 2.7 学习笔记 内置语句、函数、标准库
- 腾讯开源首个医疗AI项目,业内首个3D医疗影像大数据预训练模型
- linux kill tl进程,【linux】kill ;杀死某一用户下的所有进程
- Eclipse for Android 开发环境搭建及各种坑
- 关于游戏开发中时间性能统计工具本身overhead较高的问题
- CRM WebClient UI里标准configuration和custom configuration区别
- stack overflow at line
- 【渝粤教育】国家开放大学2018年春季 0529-21T高级英语阅读(1) 参考试题
- Windows Forms、MFC、WTL、WxWidgets、Qt、GTK综合比较
- 微软关闭音乐服务器,微软关闭Zune音乐服务 Zune播放器变为MP3
- Linux 命令(38)—— fdisk 命令
- 【java笔记】线程(2):多线程的原理
- linux命令ftps,Linux下ftp+ssl实现ftps
- ul1581标准_UL1581标准中文版-2019电线电缆和软线的UL中文版标准.pdf
- 制作一套适用于Oracle数据库的县及县以上行政区划数据
- 【论文阅读】查询搜索中的安全和效率权衡(ACM 10.1145)
- java毕业设计家居体验平台的设计与实现Mybatis+系统+数据库+调试部署
- spark SQL自定义函数:
- linux开发板tftp 搭建,iTOP-i.MX6ULL开发板-Tftp烧写和Nfs启动