【力扣每日一题】2023.8.29 带因子的二叉树

news2025/1/20 16:21:57

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目给我们一些元素,让我们用这些元素连接形成特定的二叉树,每种元素可以使用任意次数,形成的二叉树要求每个非叶子节点的值都为左右子树节点的值的乘积。

一个数要等于两个数的乘积,那么那两个数一定会比那一个数更小,所以我们可以从较小的数入手,那么我们首先将数组从小到大进行排序,接着从左到右,从小到大去遍历。

在遍历之前我们先做个预处理,我们用一个map来存住所有元素的值,以元素为键,值全部初始化为1。map每个键值对的含义就是以键为根节点能形参的二叉树有多少个,因为每个元素都可以以自身一个节点为一棵符合标准的二叉树,所以是初始化为1。

初始化完毕就开始遍历,我们需要套两层for循环,第一层去遍历每个根节点,去更新以当前节点为根节点所能形成的二叉树的数量,更新的方法就是第二层for循环去遍历比这个节点的值更小的元素,因为要相乘等于当前元素,那么乘数肯定是比当前元素更小的。

第一层遍历我们设下标为 i ,第二层下标为 j ,我们去寻找 arr[ i ] / arr[ j ] 这个元素在不在我们的map里,如果在,那么我们就把map里键为arr[ i ] 的键值对中的值加上以那两个乘数为根节点能形成的二叉树的数量的乘积,化简一下就是 m[ arr [ i ] ] += m[ arr[ i ] / arr[ j ] ] * m[ arr[ j ] ]。

由于我们是从小到大遍历的,所以我们每次都是会更新比后面的数更小的元素,以此元素为根节点能形参的二叉树,这样就可以得到推导出以后面较大的元素为根节点能形参的二叉树的数量。所以虽然我们没有用到dp数组,但它本质上来说还是属于动态规划。

还有一点要注意的就是题目有说要对结果取余10的九次方加7,所以为了避免数值溢出,我们每次操作都要做一个取余的操作。

代码:

class Solution {
public:
    int numFactoredBinaryTrees(vector<int>& arr) {
        int res=arr.size(); //单个节点可以单独为一棵树,初始化为数组长度
        sort(arr.begin(),arr.end());
        unordered_map<int,long>m;   //用来记录以每个数为根节点的二叉树数目
        for(int i:arr){
            m[i]=1;
        }
        for(int i=0;i<arr.size();i++){
            for(int j=0;j<i;j++){
                //如果发现arr[i]整除arr[j]的数也在数组里,那么可以多组成的二叉树数目等于以arr[j]为根节点的二叉树数目乘上以另一个除数为根节点的二叉树数目.
                if(arr[i]%arr[j]==0&&m.find(arr[i]/arr[j])!=m.end()){
                    int t=m[arr[i]/arr[j]]*m[arr[j]]%1000000007;
                    m[arr[i]]+=t;   //更新以arr[i]为根节点的二叉树数目.
                    res+=t;
                    res%=1000000007;
                }
            }
        }
        return res;
    }
};

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

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

相关文章

【深度解析】朗逸与宝来汽车:哪款更适合你?

在汽车市场中&#xff0c;朗逸和宝来都是非常受欢迎的车型。它们各自都有独特的优点和缺点&#xff0c;那么&#xff0c;究竟哪款车更适合你呢&#xff1f;让我们一起来深度解析一下。 朗逸&#xff0c;作为大众的入门级车型&#xff0c;以其稳定的性能和较高的性价比赢得了消费…

深入详解ThreadLocal

本文已收录至GitHub&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 什么是ThreadLocalThreadLocal 原理set方法get方法remove方法 ThreadLocal 的Hash算法ThreadLocal …

海川润泽气泡水位计 重磅上线

一、概述 以市场为导向&#xff0c;海川润泽推出新款气泡水位计&#xff08;型号&#xff1a;HC-QPSW10-S&#xff09;。气泡水位计具有测量精度高&#xff0c;免气瓶&#xff0c;免测井&#xff0c;免维护&#xff0c;抗振动&#xff0c;寿命长等特点&#xff0c;特别适用于流…

印刷行业MES系统解决方案

印刷行业存在许多问题&#xff0c;这些问题可能因地区、技术和市场变化而有所不同。以下是一些可能的印刷行业现存问题&#xff1a; 1.环保问题&#xff1a;印刷过程中使用的化学品和材料可能对环境造成污染。废墨、废纸、有毒化学品等的处理和处理成为一个重要的问题。 2.…

优思学院|六西格玛推行为什么会失败?应如何避免?

六西格玛项目可以为企业带来丰厚的经验和巨大的利益&#xff1b;然而&#xff0c;并非所有的项目都能达到预期的效果。根据一项在国外的调查发现&#xff0c;在184家受访公司中&#xff0c;80.6%的公司声称六西格玛工作未能成功实现他们的预期的价值&#xff0c;74.1%的公司说他…

UG\NX二次开发 代工分享的“单个体XY排料工具”源码

文章作者:代宇(Q:873058673) 简介: 单个体XY排料,昨天代工在开发群里分享了一个排料的视频,我觉得挺有意思,就私聊要来了源码,经过作者同意可以分享给大家。请欣赏: 效果: 代码: //单个体XY排料 代工QQ:873058673 //-------------------------------…

亥姆霍兹线圈的几个特点

亥姆霍兹线圈可以用于磁学、电子学和核物理学等领域的实验研究中&#xff0c;是一种常见的基础实验仪器。亥姆霍兹线圈有以下几个特点&#xff1a; 1、磁场均匀性好&#xff1a;由于该线圈的结构和定位方式&#xff0c;使得两个线圈的磁场强度和方向都非常均匀&#xff0c;可以…

R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达自激过程时间序列...

全文下载链接&#xff1a;http://tecdat.cn/?p25880 本文描述了一个模型&#xff0c;该模型解释了交易的聚集到达&#xff0c;并展示了如何将其应用于比特币交易数据。这是很有趣的&#xff0c;原因很多。例如&#xff0c;对于交易来说&#xff0c;能够预测在短期内是否有更多…

IDA Python 使用总结

环境配置 切换 python 版本 运行 IDA 安装目录下的 idapyswitch.exe &#xff0c;选择使用的 python 解释器。 在 PyCharm 中写 IDAPython 脚本 在 PyCharm 的设置→项目→Python解释器点击设置选择全部显示… 点击如下位置添加自定义路径 路径选择 IDA Pro 7.6\python\3…

国标GB28181视频平台EasyGBS国标平台激活码授权提示“授权失败”的问题解决方案

EasyGBS平台是基于国标GB28181协议的视频云服务平台&#xff0c;支持多路设备接入&#xff0c;并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流。平台可为大数据等综合性监管平台提供极强的视频能力&#xff0c;既能作为能力平台为业务层提供接口调用…

Boost开发指南-4.12utility

utility utility库不是一个有统一主题的Boost库&#xff0c;而是包含了若干个很小但有用的工具。 本章开头介绍的noncopyable.swap都曾经被归类在utility库里(现在则属于core库),此外utility还包括其他很多个实用类&#xff0c;如 base_from_member、compressed_pair、checke…

操作系统复习总结5

操作系统复习总结&#xff0c;仅供笔者复习使用&#xff0c;参考教材&#xff1a; 《操作系统原理》 - 何静媛编著. 西安电子科技大学出版社《操作系统考研复习指导》2024年 - 王道论坛组编. 电子工业出版社 本文主要内容为&#xff1a;输入输出管理&#xff1b; 计算机系统…

经典卷积网络

目录 一、经典神经网络出现的时间线​编辑 二、LeNet 三、AlexNet 四、VGGNet 五、InceptionNet 六、ResNet 总结&#xff1a; 一、经典神经网络出现的时间线 二、LeNet 背景&#xff1a;LeNet由Yann LeCun于1998年提出&#xff0c;卷积网络开篇之作。 解释&#xff1…

Error: PostCSS plugin autoprefixer requires PostCSS 8 问题解决办法

报错&#xff1a;Error: PostCSS plugin autoprefixer requires PostCSS 8 原因&#xff1a;autoprefixer版本过高 解决方案&#xff1a; 降低autoprefixer版本 执行&#xff1a;npm i postcss-loader autoprefixer8.0.0

拓世AI | 智能家居比朋友还贴心,开启人类生活全面智能的一天

每个时代都有它的标志性技术&#xff0c;在21世纪&#xff0c;无疑是人工智能。当日光悄悄溜进窗台&#xff0c;一切都在静默中苏醒&#xff0c;你的家已经开始了新的一天。不再是单纯的墙壁、屋顶和家具&#xff0c;它现在是一个“生命体”&#xff0c;倾听你的需求&#xff0…

ssm会议管理系统源码和论文

ssm会议管理系统源码和论文087 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&…

android Double.valueOf 报java.lang.NumberFormatException

执行到 Double.valueOf 时&#xff0c;报NumberFormatException&#xff0c;在中文&#xff0c;英文时没问题&#xff0c;切换例如 法语 才会出现。是因为执行&#xff1a; df.format((double) fileS / 1024)时&#xff0c;中文、因为都正常返回值是22.75 但法语时会返回22,…

【附安装包】Vm虚拟机安装Linux系统教程

软件下载 软件&#xff1a;Linux版本&#xff1a;18.0.4语言&#xff1a;简体中文大小&#xff1a;1.82G安装环境&#xff1a;VMware硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①丨百度网盘&#xff1a;1.Vm虚拟机15.5下载链接&#xff1a;https://pan…

IDEA如何打jar包

IntelliJ IDEA如何打jar包 1、无maven打jar包 1、编写好Java项目后&#xff0c;点击File --> Project Structure&#xff0c;然后按照以下图示步骤进行打包操作 若项目还存在一些额外的文件&#xff0c;可通过以下方式&#xff0c;将文件添加到jar包中。 //如果我们将项目…

hive lateral view 实践记录

正确插入数据&#xff1a; create table tmp.test_lateral_view_movie_230829(movie string,category array<string>);insert into tmp.test_lateral_view_movie_230829 select 《战狼3》,array(战争,动作,剧情); insert into tmp.test_lateral_view_movie_230829 selec…