​LeetCode解法汇总823. 带因子的二叉树

news2024/11/24 4:06:56

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

给出一个含有不重复整数元素的数组 arr ,每个整数 arr[i] 均大于 1。

用这些整数来构建二叉树,每个整数可以使用任意次数。其中:每个非叶结点的值应等于它的两个子结点的值的乘积。

满足条件的二叉树一共有多少个?答案可能很大,返回 对 109 + 7 取余 的结果。

示例 1:

输入: arr = [2, 4]
输出: 3
解释: 可以得到这些二叉树: [2], [4], [4, 2, 2]

示例 2:

输入: arr = [2, 4, 5, 10]
输出: 7
解释: 可以得到这些二叉树: [2], [4], [5], [10], [4, 2, 2], [10, 2, 5], [10, 5, 2].

提示:

  • 1 <= arr.length <= 1000
  • 2 <= arr[i] <= 109
  • arr 中的所有值 互不相同

解题思路:

从小到大排列,后面的数字,一定是前面数字的乘积。所以我们先求前面的值二叉树可能数量,并且保存下来。后面的值如果存在两个数的乘积,就是前面两个数的可能数量的乘积,如果两个数不同,则还需要乘以2,因为左右位置可以调换。

代码:

class Solution823
{
public:
    int numFactoredBinaryTrees(vector<int> &arr)
    {
        sort(arr.begin(), arr.end());
        map<int, long long> numMap;
        long long sum = 0;
        int index = 0;
        long long mod = 1e9 + 7;
        while (index < arr.size())
        {
            int i = 0;
            long long num = 1;
            int currentValue = arr[index];
            while (arr[i] <= (currentValue / arr[i]))
            {
                if (currentValue % arr[i] != 0)
                {
                    i++;
                    continue;
                }
                int value = currentValue / arr[i];
                if (numMap.find(value) == numMap.end())
                {
                    i++;
                    continue;
                }
                if (value == arr[i])
                {
                    num = (num + numMap[value] * numMap[value]) % mod;
                }
                else
                {
                    num = (num + (numMap[value] * numMap[arr[i]] * 2)) % mod;
                }
                i++;
            }
            sum = (sum + num) % mod;
            numMap[currentValue] = num;
            index++;
        }
        return sum;
    }
};

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

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

相关文章

向前兼容与向后兼容

2012年3月发布了Go 1.0,随着 Go 第一个版本发布的还有一份兼容性说明文档。该文档说明&#xff0c;Go 的未来版本会确保向后兼容性&#xff0c;不会破坏现有程序。 即用10年前Go 1.0写的代码&#xff0c;用10年后的Go 1.18版本&#xff0c;依然可以正常运行。即较高版本的程序能…

泰凌微科创板成功上市

2023年8月25日&#xff0c;泰凌微电子&#xff08;上海&#xff09;股份有限公司&#xff08;股票简称“泰凌微”&#xff0c;股票代码为“688591.SH”&#xff09;成功于上海证券交易所科创板挂牌上市。自泰凌微成立以来&#xff0c;便一直致力于研发具有自主知识产权、国际一…

Matter 设备配网流程 ---- 配网材料和 SPAKE2P 机制

Matter 设备配网流程 ---- 配网材料和 SPAKE2P 机制 1. Matter 配网材料 Matter 配网&#xff08;commissioning&#xff09;使用 SPAKE2P 协议完成 PASE&#xff0c;进而验证 DAC&#xff08;Device Attestation Credentials&#xff09;&#xff0c;派发 NOC&#xff0c;然…

ubuntu入门01——windows上直接部署linux(WSL)

win10安装参考如下教程&#xff1a; 旧版 WSL 的手动安装步骤 | Microsoft Learn 说明&#xff1a;该文档是我按如上教程安装使用Ubuntu写的回顾&#xff0c;家人们参考官方教程更妙。 1.启用适用于Linux的wundows子系统 2.启用虚拟机功能 dism.exe /online /enable-feat…

Java IO操作——BufferedReader

BufferReader Java IO操作——BufferedReader(缓冲区读取内容&#xff0c;避免中文乱码) 要点&#xff1a; 掌握BufferedReader类的使用 掌握键盘输入的基本形式 Buffer&#xff1a;表示缓冲区的。之前的StringBuffer&#xff0c;缓冲区中的内容可以更改&#xff0c;可以提高…

递归算法学习——子集

目录 一&#xff0c;题目解析 二&#xff0c;例子 三&#xff0c;题目接口 四&#xff0c;解题思路以及代码 1.完全深度搜索 2.广度搜索加上深度优先搜索 五&#xff0c;相似题 1.题目 2.题目接口 3.解题代码 一&#xff0c;题目解析 给你一个整数数组 nums &#xff0c…

合宙Air724UG LuatOS-Air LVGL API控件--复选框 (Checkbox)

复选框 (Checkbox) 复选框主要是让用户进行一些内容选择&#xff0c;或者同意用户协议。 示例代码 – 复选框回调函数 function event_handler(obj, event) if event lvgl.EVENT_VALUE_CHANGED then print(“State”, lvgl.checkbox_is_checked(obj)) end end – 创建复选框…

python学习1之安装

前言 目前&#xff0c;Python有两个版本&#xff0c;一个是2.x版&#xff0c;一个是3.x版&#xff0c;这两个版本是不兼容的。由于3.x版越来越普及&#xff0c;我们的教程将以最新的Python 3.9版本为基础。 1、下载 官网地址 https://www.python.org/downloads/ 2、安装 点击…

并发 04(Callable,CountDownLatch)详细讲解

并发 Callable 1 可以返回值 2可以抛出异常 泛型指的是返回值的类型 public class Send {public static void main(String[] args) {//怎么启动Callable//new Thread().start();Aaa threadnew Aaa();FutureTask futureTasknew FutureTask(thread);new Thread(futureTask,&qu…

这款自研RedCap网关终端,获评优秀!

近日&#xff0c;由通信世界全媒体主办的“5GRedCap技术与物联网应用创新研讨会”在北京举办。作为中国电信5GInside合作计划的重要成果&#xff0c;天翼物联自主研发的“RedCap网关终端CTW-GW-01”产品获“5GRedCap优秀产品和解决方案”。此次会议&#xff0c;天翼物联行业总监…

pyqt5 QuickStart

在使用pyqt5之前&#xff0c;建议下载一个Anaconda环境&#xff0c;这样下载python包更方便&#xff0c;本篇文章是建立在已经安装好Anaconda的情况下使用的。IDE就是标准的PyCharm了。 一、pyqt包的安装 python终端执行下面两个安装命令&#xff1a; pip install PyQt5 pip …

HTTP:http上传文件的原理及java处理方法的介绍

为了说明原理&#xff0c;以下提供一个可以上传多个文件的例子&#xff0c;html页面代码如下&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>http upload file</title> </head> <body>…

LeetCode56.合并区间

这道题我想了一会儿&#xff0c;实在想不到比较好的算法&#xff0c;只能硬着头皮写了&#xff0c;然后不断的debug&#xff0c;经过我不懈的努力&#xff0c;最后还是AC&#xff0c;不过效率确实低。 我就是按照最直接的方法来&#xff0c;先把intervals数组按照第一个数star…

gRPC + Spring Boot 编程教程 - piot

在本文中&#xff0c;您将学习如何实现通过 gRPC 通信的 Spring Boot 应用程序。gRPC 是一个现代开源远程过程调用 (RPC) 框架&#xff0c;可以在任何环境中运行。默认情况下&#xff0c;它使用 Google 的 Protocol Buffer 来序列化和反序列化结构化数据。当然&#xff0c;我们…

supervisorctl(-jar)启动配置设置NACOS不同命名空间

背景 由于需要在上海服务器上面配置B测试环境&#xff0c;原本上面已有A测试环境&#xff0c;固需要将两套权限系统分开 可以使用不同的命名空间来隔离启动服务 注&#xff1a;本文章均不涉及公司机密 1、新建命名空间 命名空间默认会有一个public&#xff0c;并且不能删除&a…

「Linux」使用VS Code远程连接Linux

一、VS Code简介 1.VS Code是什么&#xff1f; Visual Studio Code&#xff08;简称“VS Code”&#xff09;是微软公司的一个运行可以于 Mac OS、Windows 和 Linux之上的源代码编辑器。简单地说VS Code是一个编辑器&#xff0c;用来写代码。是一个基于插件的软件。 2.使用VSCo…

C++中的虚函数

一、虚函数 &#xff08;类继承中的一种函数&#xff09; 概念 概念 被virtual修饰的函数叫做虚函数。 为什么说虚函数是类继承中的一种函数呢&#xff1f; 因为虚函数的作用确实主要是在类的继承中体现的&#xff08;即派生类和基类&#xff09; 虚函数的作用就是当基类和派生…

Verilog基础:巴科斯范式(BNF)

相关阅读 Verilog基础专栏https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 由于Verilog HDL标准中对语法的描述使用了Backus Naur Form&#xff08;BNF&#xff09;。本文将对其中的约定进行描述。 小写单词&#xff0c;其中一些包含…

安防监控/视频汇聚平台EasyCVR调用rtsp地址返回的IP不正确是什么原因?

安防监控/云存储/磁盘阵列存储/视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RT…

【记录】USSOCOM Urban3D 数据集读取与处理

Urban3D数据集内容简介 Urban3D数据集图像为正摄RGB影像&#xff0c;分辨率为50cm。 从SpaceNet上使用aws下载数据&#xff0c;文件夹结构为&#xff1a; |- 01-Provisional_Train|- GT|- GT中包含GTC&#xff0c;GTI&#xff0c;GTL.tif文件&#xff0c;GTL为ground truth b…