每日一题 823. 带因子的二叉树

每日一题 823. 带因子的二叉树 难度:中等
在这里插入图片描述
思路:

  1. 取乘积,那么两个叶子节点相乘一定会得到一个更大的数,所以先排序
  2. 以父节点为根节点的数的数量 = 以右节点为根节点的数的数量 * 以左节点为根节点的数的数量
  3. 初始化列表,每个数作为根节点都至少能以它本身构建一棵树,所以每个数的初始对应数量为 1,这里为了快速查找,定义字典来实现
  4. 从小到大遍历排好序的数组,寻找能构成 右子 * 左子 = 当前数 的组合,并更新当前数所对应的组合数
  5. 返回字典中所有值的和

代码如下:

class Solution:def numFactoredBinaryTrees(self, arr: List[int]) -> int:arr.sort()t = {}for i in range(len(arr)):t[arr[i]] = 1for i in range(len(arr)):for j in range(0, i):if arr[i] % arr[j] == 0 and arr[i]/arr[j] in t:t[arr[i]] = (t[arr[i]] + t[arr[j]] * t[arr[i]/arr[j]]) % (10 ** 9 + 7)return sum(t.values()) % (10 ** 9 + 7)

但我不知道为什么下面的代码能更快实现,感觉差不多
学习:快速构建含有初值的字典 r = { x: 1 for x in arr}

class Solution: def numFactoredBinaryTrees(self, arr: List[int]) -> int:arr.sort()r = { x: 1 for x in arr}for x in arr:a = sqrt(x)if a in r:r[x] += r[a] ** 2for j in range(bisect.bisect_left(arr, a)):if not x % arr[j] and x / arr[j] in r:r[x] += r[arr[j]] * r[x / arr[j]] * 2return sum(r.values()) % 1000000007

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

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

相关文章

花5分钟判断,你的Jmeter技能是大佬还是小白!

jmeter 这个工具既可以做接口的功能测试,也可以做自动化测试,还可以做性能测试,其主要用途就是用于性能测试。但是,有些公司和个人,就想用 jmeter 来做接口自动化测试。 你有没有想过呢? 下面我就给大家讲…

多线程(二)

一.关于线程的常用操作 1.启动线程 run(): 对于run方法的覆写只是指定线程要做的任务清单,而不是真正的启动线程 start(): start()方法才是真正的在底层创建出一个线程,并且启动 2.中断线程 1.通过共享的标记来中断 package demo; impor…

unity-AI自动导航

unity-AI自动导航 给人物导航 一.地形创建 1.首先我们在Hierarchy面板中创建一个地形对象terrian,自行设定地形外貌,此时我们设置一个如下的地形外观。 二.创建导航系统 1.在主人公的Inspector、面板中添加Nav Mesh Agent (导航网格代理&…

python中的matplotlib画直方图(数据分析与可视化)

python中的matplotlib画直方图(数据分析与可视化) import numpy as np import pandas as pd import matplotlib.pyplot as pltpd.set_option("max_columns",None) plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus]Fa…

【Linux】进程通信 — 信号(下篇)

文章目录 📖 前言1. 阻塞信号1.1 信号其他相关常见概念:1.2 sigset_t:1.2 - 1 信号集操作函数 1.3 sigprocmask:1.4 sigpending: 2. 进程处理信号2.1 内核页表和用户页表:2.2 内核态和用户态:2.…

「Vue|网页开发|前端开发」02 从单页面到多页面网站:使用路由实现网站多个页面的展示和跳转

本文主要介绍如何使用路由控制来实现将一个单页面网站扩展成多页面网站,包括页面扩展的逻辑,vue的官方路由vue-router的基本用法以及扩展用法 文章目录 本系列前文传送门一、场景说明二、基本的页面扩展页面扩展是在扩什么创建新页面的代码,…

面试题-React(七):React组件通信

在React开发中,组件通信是一个核心概念,它使得不同组件能够协同工作,实现更复杂的交互和数据传递。常见的组件通信方式:父传子和子传父 一、父传子通信方式 父组件向子组件传递数据是React中最常见的一种通信方式。这种方式适用…

SpringBoot异步方法支持注解@Async应用

SpringBoot异步方法支持注解Async应用 1.为什么需要异步方法? 合理使用异步方法可以有效的提高执行效率 同步执行(同在一个线程中): 异步执行(开启额外线程来执行): 2.SpringBoot中的异步方法支持 在SpringBoot中并不需要我们自己去创建维护线程或者线程池来…

C#_进程单例模式.秒懂Mutex

什么是Mutex? 可以定义调用线程是否具有互斥性,程序创建者拥有控制权,相反只能引用程序。 参数1:如果是程序创建者,就获得控制权。 参数2:名称,可使用GUID生成。 参数3:out 返回值&#xf…

Linux下套接字TCP实现网络通信

Linux下套接字TCP实现网络通信 文章目录 Linux下套接字TCP实现网络通信1.引言2.具体实现2.1接口介绍1.socket()2.bind()3.listen()4.accept()5.connect() 2.2 服务器端server.hpp2.3服务端server.cc2.4客户端client.cc 1.引言 ​ 套接字(Socket)是计算机网络中实现网络通信的一…

1688API技术解析,实现获得1688商品详情

要实现获得1688商品详情,你需要使用1688 API。1688 API是阿里巴巴旗下的开放平台,它提供了一套丰富的接口,可以让开发者通过编程的方式获取到1688网站上的商品信息。 首先,你需要在阿里开放平台注册一个账号,并创建一…

【NLP的python库(01/4) 】: NLTK

一、说明 NLTK是一个复杂的库。自 2009 年以来不断发展,它支持所有经典的 NLP 任务,从标记化、词干提取、词性标记,包括语义索引和依赖关系解析。它还具有一组丰富的附加功能,例如内置语料库,NLP任务的不同模型以及与S…

深眸科技创新赋能视觉应用产品,以AI+机器视觉解决行业应用难题

随着工业4.0时代的加速到来,我国工业领域对于机器视觉技术引导的工业自动化和智能化需求持续上涨,国内机器视觉行业进入快速发展黄金期,但需求广泛出现同时也对机器视觉产品的检测能力提出了更高的要求。 传统机器视觉由人工分析图像特征&am…

JAVA JNA 调用C接口的三种方式

文章目录 1. 准备一个共享库文件2. JNA姿势1—继承Library接口3. JNA姿势2—直接NativeLibrary.getInstance3. JNA姿势3—Native方法 1. 准备一个共享库文件 test.c #include <stdio.h> int test(char *input){printf("input:%s\n",input);return 0; }libtes…

从Matrix-ResourceCanary看内存泄漏监控

作者&#xff1a;小海编码日记 不同于LeakCanary&#xff0c;在Matrix中&#xff0c;主要是通过Resource Canary来监控内存泄漏问题的&#xff0c;且监听的泄漏对象只支持Activity&#xff0c;官方说明如下&#xff1a; 结合分析LeakCanary的经验可知&#xff0c;要实现Activit…

fastadmin iis伪静态应用入口文件index.php

<?xml version"1.0" encoding"UTF-8"?> <configuration><system.webServer><rewrite><rules><rule name"OrgPage" stopProcessing"true"><match url"^(.*)$" /><conditions…

【python知识】用 Tkinter实现“剪刀-石头-布”和“弹球游戏 ”

一、提要 Tkinter是一个Python内置模块&#xff0c;它提供了一个简单易用的界面来创建GUI。 在实现一些动态的画面、如游戏还是需要一些创新性思维的。在本文中&#xff0c;我们将使用 Tkinter 探索 Python GUI 编程。我们将介绍 Tkinter 的基础知识&#xff0c;并演示如何使用…

Element Plus 日期选择器的使用和属性

element plus 日期选择器如果如果没有进行处理 他会返回原有的属性值data格式 如果想要获取选中的日期时间就需要通过以下的代码来实现选中的值 format"YYYY/MM/DD" value-format"YYYY-MM-DD" <el-date-pickerv-model"formInline.date" type&…

「MySQL-05」MySQL Workbench的下载和使用

目录 一、MySQL workbench的下载和安装 1. MySQL workbench介绍 2. 到MySQL官网下载mysql workbench 3. 安装workbench 二、创建能远程登录的用户并授权 1. 创建用户oj_client 2. 创建oj数据库 3. 给用户授权 4. 在Linux上登录用户oj_client检查其是否能操作oj数据库 三、使用…

gerrit 如何提交进行review

前言 本文主要介绍如何使用gerrit进行review。 下述所有流程都是参考&#xff1a; https://gerrit-review.googlesource.com/Documentation/intro-gerrit-walkthrough.html 先给一个commit后但是还没有push上去的一个办法&#xff1a; git reset --hard HEAD^可以多次reset.…