LeetCode 337. 打家劫舍 III(记忆化+递归)

文章目录

    • 1. 题目
      • 1.1 相关题目:
    • 2. 解题
      • 2.1 递归
      • 2.2 记忆化递归

1. 题目

在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警

计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。

示例 1:
输入: [3,2,3,null,3,null,1]3/ \2   3\   \ 3   1输出: 7 
解释: 小偷一晚能够盗取的最高金额 = 3 + 3 + 1 = 7.示例 2:
输入: [3,4,5,1,3,null,1]3/ \4   5/ \   \ 1   3   1输出: 9
解释: 小偷一晚能够盗取的最高金额 = 4 + 5 = 9.

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/house-robber-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1.1 相关题目:

LeetCode 198. 打家劫舍(DP)
LeetCode 213. 打家劫舍 II(DP)

2. 解题

2.1 递归

  • 父节点偷,或者不偷,相应的子节点不偷,或者偷,取max
class Solution {
public:int rob(TreeNode* root) {return max(rob(root,0),rob(root,1));}int rob(TreeNode* root, bool steal){if(root == NULL)return 0;if(steal)return root->val+rob(root->left,0)+rob(root->right,0);else//没有偷return max(rob(root->left,0),rob(root->left,1))+max(rob(root->right,0),rob(root->right,1));}
};

暴力递归,最后一个测试例子超时。
在这里插入图片描述

2.2 记忆化递归

  • 上面有很多重复子问题
  • 利用map存储结果(不能用哈希map,编译报错,好像是因为hash函数需要自己定义)
Line 2: Char 42:   required from here
/usr/local/include/c++/8.2.0/bits/hashtable.h:195:21: error: staticassertion failed: hash function must be invocable with an argument of key typestatic_assert(__is_invocable<const _H1&, const _Key&>{},^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Solution {map<pair<TreeNode*,bool>,int> m;
public:int rob(TreeNode* root) {return max(rob(root,0),rob(root,1));}int rob(TreeNode* root, bool steal){if(root == NULL)return 0;if(m.find(make_pair(root,steal)) != m.end())return m[make_pair(root,steal)];if(steal){int val = root->val + rob(root->left,0) + rob(root->right,0);m[make_pair(root,steal)] = val;return val;}else//没有偷root{int val = max(rob(root->left,0),rob(root->left,1))+max(rob(root->right,0),rob(root->right,1));m[make_pair(root,steal)] = val;return val;}}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

孵化业务快速落地与优化

海外酒店是酒旅事业群第一个孵化的业务&#xff0c;从2016年9月份开始到现在已经半年多的时间。在业务后台搭建、成长、优化过程中&#xff0c;经历了很多的思考与选择。 主要分为下面几个阶段&#xff1a; 初建&#xff1a;调研、落地&#xff0c;合理复用&#xff0c;高效自建…

TPLinker 联合抽取 实体链接方式+源码分析

关系抽取–TPLinker&#xff1a; https://blog.csdn.net/weixin_42223207/article/details/116425447 Tagging TPLinker模型需要对关系三元组(subject, relation, object)进行手动Tagging&#xff0c;过程分为三部分&#xff1a; &#xff08;1&#xff09;entity head to enti…

论文浅尝 | KGAT: 用于推荐的知识图注意力网络

笔记整理 | 李爽&#xff0c;天津大学链接&#xff1a;https://arxiv.org/pdf/1905.07854v1.pdf动机为了提供更准确、多样化和可解释的推荐&#xff0c;必须超越对用户-项目交互的建模&#xff0c;并考虑辅助信息。传统的方法&#xff0c;如因子分解机(FM)&#xff0c;将其视为…

对话系统答非所问?快试试这篇ACL'21的连贯性评估大法

文 | 页眉3编 | 小轶背景当我们在绞尽脑汁地想怎么设计一个对话系统的时候&#xff0c;我们当然希望最后训练出来的系统能越像人越好&#xff0c;输出的回复很连贯&#xff0c;很有趣&#xff0c;很体贴。而其中&#xff0c;连贯性可以说是最基本的要求之一了&#xff0c;毕竟不…

LeetCode 384. 打乱数组(rand)

1. 题目 打乱一个没有重复元素的数组。 示例:// 以数字集合 1, 2 和 3 初始化数组。 int[] nums {1,2,3}; Solution solution new Solution(nums);// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。 solution.shuffle();// 重设数组到它的初始状态[…

论文浅尝 - ACL2020 | 知识图谱补全方法的再评估

笔记整理 | 谭亦鸣&#xff0c;东南大学博士来源&#xff1a;ACL 2020链接&#xff1a;https://www.aclweb.org/anthology/2020.acl-main.489.pdf源码&#xff1a;http://github.com/svjan5/kg-reeval概述图谱补全&#xff08;KGC&#xff09;的目标是自动的预测大规模知识图谱…

美团数据库高可用架构的演进与设想

本文介绍最近几年美团MySQL数据库高可用架构的演进过程&#xff0c;以及我们在开源技术基础上做的一些创新。同时&#xff0c;也和业界其它方案进行综合对比&#xff0c;了解业界在高可用方面的进展&#xff0c;和未来我们的一些规划和展望。 在2015年之前&#xff0c;美团&…

恕我直言,很多小样本学习的工作就是不切实际的

文 | ????????????????编 | 小轶以前的小样本学习&#xff08;Few-shot Learning&#xff09;&#xff0c;是需要用一个巨大的训练集训练的。测试时只给出 n-way k-shot&#xff0c;在这 N * k 个样本上学习并预测。我第一次看到这种任务设定的时候真是非常失望…

LeetCode 204. 计数质数(质数的倍数不是质数)

1. 题目 统计所有小于非负整数 n 的质数的数量。 示例:输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。2. 填表解题 2的倍数不是质数3的倍数不是质数5的倍数&#xff0c;7的倍数&#xff0c;11的倍数。。。质数的倍数不是质数 class Solution { p…

论文浅尝 | 六篇2020年知识图谱预训练论文综述

转载公众号 | AI机器学习与知识图谱本文介绍六篇有关知识图谱预训练的优秀论文&#xff0c;大致上可分为两类&#xff0c;生成学习模型和对比学习模型。其中GPT-GNN模型是生成学习模型&#xff0c;模型灵感来源于自然语言处理中的GPT模型&#xff1b;GCC&#xff0c;GraphCL&am…

distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.parse(‘setupto

distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.parse(‘setupto: 解决办法 1、安装scm&#xff1a;pip install setuptools-scm 2、 升级pip&#xff1a;pip install --upgrade pip 3、安装setuptools&#xff1a;pip install set…

客户端自动化测试研究

测试作为质量保证极其重要的一环&#xff0c;在移动App开发流程中起到非常关键的作用。从开发工程师到测试工程师&#xff0c;人人都应具备良好的测试意识&#xff0c;将隐患和风险在上线之前找出并解决&#xff0c;可以有效的减少线上事故。 美团和大众点评App作为美团点评平台…

视觉增强词向量:我是词向量,我开眼了!

文 | 橙橙子亲爱的读者&#xff0c;你是否被各种千亿、万亿模型的发布狂轰乱炸&#xff0c;应接不暇&#xff0c;甚至有点产生对大模型的审美疲劳&#xff1f;出于这个目的&#xff0c;今天来分享一篇研究静态词向量的小清新文章。希望大家可以在理性追热的同时&#xff0c;小冶…

会议交流 | 知识图谱前沿技术与热门应用

长按上图或点击『阅读原文』免费报名随着人工智能技术的发展与应用&#xff0c;知识图谱作为AI进步的阶梯越来越受到学术界和产业界的重视&#xff0c;并且已经在很多领域、场景中体现出自身的价值。从最初的互联网搜索、推荐、问答等ToC场景&#xff0c;逐渐进入到垂直行业ToB…

美团点评酒店后台故障演练系统

随着海量请求、节假日峰值流量和与日俱增的系统复杂度出现的&#xff0c;很有可能是各种故障。在分析以往案例时我们发现&#xff0c;如果预案充分&#xff0c;即使出现故障&#xff0c;也能及时应对。它能最大程度降低故障的平均恢复时间&#xff08;MTTR&#xff09;&#xf…

那些在家啃书自学算法的人,最后都找到工作了吗?

面试官手把手带你刷题AI岗位面试题 详解训练特惠免费0元在准备应聘的过程中&#xff0c;大部分同学关注点都在自己的技术水平以及项目经验是否能够比过其他人。但往往忽略了一点&#xff0c;你会的和你在面试中能完全讲清楚是两码事&#xff0c;如果不提前梳理好思路&#xff0…

论文小综 | 知识图谱中的复杂查询问答

作者 | 张文&#xff0c;浙江大学博士&#xff0c;研究兴趣为知识图谱表示与推理陈名杨&#xff0c;浙江大学在读博士生&#xff0c;研究兴趣为知识图谱表示与推理本文将介绍近两年4篇关于知识图谱中的复杂查询问答(Complex Query Answering, CQA)的研究工作。复杂查询问答的目…

LeetCode 103. 二叉树的锯齿形层次遍历(BFS / 双栈)

1. 题目 给定一个二叉树&#xff0c;返回其节点值的锯齿形层次遍历。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 例如&#xff1a; 给定二叉树 [3,9,20,null,null,15,7],3/ \9 20/ \…

KeyError: ‘segment_ids paddlehub中出现segement_ids错误解决方案

examples.append((encoded_inputs[‘input_ids’], encoded_inputs[‘segment_ids’])) KeyError: ‘segment_ids’ 找到源代码&#xff1a;输出encoded_inputs 将segments_ids改成 token_type_ids解决问题

Android增量代码测试覆盖率工具

美团业务快速发展&#xff0c;新项目新业务不断出现&#xff0c;在项目开发和测试人员不足、开发同学粗心的情况下&#xff0c;难免会出现少测漏测的情况&#xff0c;如何保证新增代码有足够的测试覆盖率是我们需要思考的问题。 先看一个bug&#xff1a; 以上代码可能在onDesto…