2003. 每棵子树内缺失的最小基因值 (困难,DFS,Set.update)

news2024/12/23 13:38:12

在这里插入图片描述
困难,还是一如既往的不会做,但是得写写自己的想法

  1. 先从根节点开始作深度搜索,对于每一个以 node 为根的子树,我们返回该子树排序后的基因集合,类似与归并排序
  2. 显然在每次合并集合进行排序的时候我们就可以知道 node 子树内缺失的最小基因值
  3. 我是觉得时间复杂度就在 O(nlogn),顶多n之前多几个常数系数,但还是超时了

正解:

  1. set集合的查找是 O(1) 的,当通过 set1.update(set2) 来合并两个 set 时(其中 set1 比 set2 大),同时对树作 dfs 是 O(nlogn)
  2. 所以不用排序合并,直接从 node 节点的子树中的最大缺失的最小基因值开始找 node 树的缺失的最小基因值,这个过程是 O(n)
  3. 所以总共是 O(nlogn)
class Solution:
    def smallestMissingValueSubtree(self, parents: List[int], nums: List[int]) -> List[int]:
        n = len(parents)
        child = defaultdict(list)
        for i in range(n):
            if parents[i] == -1:
                continue
            child[parents[i]].append(i)
        
        ans = [1] * n

        def find(node):
            childs = [[nums[node]]]
            for c in child[node]:
                childs.append(find(c))
            
            l, ans[node] = sort0(childs)
            return l
            
        def sort0(ll):
            a, b = [], []
            if len(ll) > 2:
                a, _ = sort0(ll[:len(ll)//2])
                b, _ = sort0(ll[len(ll)//2:])
            elif len(ll) == 2:
                a = ll[0]
                b = ll[1]
            else:
                return ll[0], 1 if ll[0][0] != 1 else 2
            t = []
            m = 1
            while len(a) > 0 and len(b) > 0:
                if a[0] > b[0]:
                    if b[0] == m:
                        m += 1
                    t.append(b[0])
                    b.pop(0)
                else:
                    if a[0] == m:
                        m += 1
                    t.append(a[0])
                    a.pop(0)
            while len(a) > 0:
                if a[0] == m:
                    m += 1
                t.append(a[0])
                a.pop(0)
            while len(b) > 0:
                if b[0] == m:
                    m += 1
                t.append(b[0])
                b.pop(0)
            return t, m
        
        find(0)
        return ans

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

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

相关文章

innovus: 如何写出floorplan和power信息

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 相关文章链接: innovus 报告多边形floorplan的boundary坐标 defOut 如果是自己用的floorplan信息可用如下命令: defOut -floorplan -allLayers fp.def 如果是dc…

JavaWeb项目Tomcat运行上一次的记录?

问题:修改JavaWeb项目的代码之后,tomcat仍然运行上一次的代码记录 原因:可能是由于运行了上一次成功记录的缓存 接解决办法: 来到运行部署的网页,按F12,打开“网络”->“禁用缓存”

解决多模态大模型幻觉问题的秘密武器:“啄木鸟”免重训方法!哪里出问题啄哪里!

夕小瑶科技说 原创 作者 | 付奶茶、王二狗 最近多模态大模型的研究取得了巨大的进展。然而,这些模型在生成时存在着文本与图像不一致的问题,这个问题就是一直困扰研究者们的“幻觉难题”。 ▲给定一幅图像,MLLM会输出的回应,包括…

堆栈和队列算法-双向队列

目录 堆栈和队列算法-双向队列 C代码 堆栈和队列算法-双向队列 双向队列(Double Ended Queues,DEQue)为一个有序线性表,加入与删除操作可在队列的任意一端进行。 具体来说,双向队列就是允许队列两端中的任意一端都…

Acrel-3000水电站厂用电管理系统实现电站的发、用电监控、设备管理和运维管理-安科瑞黄安南

NB/T 10861-2021《水力发电厂测量装置配置设计规范》对水电厂的测量装置配置做了详细要求和指导。测量装置是水力发电厂运行监测的重要环节,水电厂的测量主要分为电气量测量和非电量测量。电气测量指使用电的方式对电气实时参数进行测量,包括电流、电压、…

【VR开发】【Unity】【VRTK】2-关于VR的基础知识

【概述】 在VRTK的实操讲解之前,本篇先介绍几个重要的VR认识。 【VR对各个行业的颠覆】 如果互联网几乎把所有行业都重做了一遍,VR在接下来的几年很可能再把现有的行业都重做一遍,包括但不限于教育,房地产,零售&…

C#--继承

提高开发效率的一种手段 继承就是把大家共性的东西提取出来,共享 被僵尸咬一口你也是僵尸 C#不支持多重继承 C#类可以派生自另一个类和任意多个接口 继承具有单根性,一个派生类只能继承一个父类 如果没有写继承自那个类,默认继承object类&am…

面试官:聊聊kafka线上使用会有哪些问题?

哪些环节会造成消息丢失? 首先说说哪些环节会丢消息 消息生产者: (1)acks0: 表示producer不需要等待任何broker确认收到消息的回复,就可以继续发送下一条消息。性能最高,但是最容易丢消 息。大…

AMEYA360:村田量产面向汽车的1.0μF 0.18mm超薄LW逆转低ESL片状多层陶瓷电容器

株式会社村田制作所已开发出面向汽车ECU(电子控制单元)中使用的处理器、超小*(0.5mm1.0mm)且超薄的LW逆转低ESL片状多层陶瓷电容器“LLC15SD70E105ME01”,并于9月开始量产。该产品T尺寸标准值为0.16 0.02 mm(厚度为最大0.18 mm),与普通多层陶瓷电容器不…

通配符/泛域名SSL证书

在互联网发展迅速的今天,许多网站都拥有多个子域名,例如www.example.com、blog.example.com和shop.example.com等。为了确保这些子域名之间的数据传输安全,通配符/泛域名SSL证书成为了一种广泛采用的解决方案。 1,什么是通配符/泛…

Kubernetes Taint(污点) 和 Toleration(容忍)

Author:rab 目录 前言一、Taint(污点)1.1 概述1.2 查看节点 Taint1.3 标记节点 Taint1.4 删除节点 Taint 二、Toleration(容忍) 前言 Kubernetes 中的污点(Taint)和容忍(Toleration…

highcharts 3D环形饼图

1.下载安装highcharts npm install highcharts --save2.在页面引入 import highcharts from highcharts3.在main.js引入 import highcharts from highcharts import highcharts3d from highcharts/highcharts-3d highcharts3d(highcharts)4.html部分代码 <div class"…

时间复杂度为 O(nlogn) 的排序算法

归并排序 归并排序遵循 分治 的思想&#xff1a;将原问题分解为几个规模较小但类似于原问题的子问题&#xff0c;递归地求解这些子问题&#xff0c;然后合并这些子问题的解来建立原问题的解&#xff0c;归并排序的步骤如下&#xff1a; 划分&#xff1a;分解待排序的 n 个元素…

v-bind动态改变样式

通过v-bind切换样式&#xff0c;:class"{ active:true}"为true展示样式&#xff0c;false不展示。也可以由:style"{ width:percent %}"动态控制宽度。 注意后面是JS对象&#xff0c;所以后面的值不可以包含-&#xff0c;比如background-color会解析出错&a…

报修软件在企业管理中有哪些作用?有什么好用的设备质量管理软件?

在当今的信息化时代&#xff0c;企业需要不断加速自身的信息化建设&#xff0c;以适应日益激烈的市场竞争。在这个过程中&#xff0c;“的修”报修软件的引入对于企业设备报修与维护的管理显得尤为重要。本文将详细介绍报修软件的重要性以及其如何帮助企业实现更高效、更智能的…

毕业论文问卷分析思路

很多同学会通过收集问卷的方式获取论文研究需要的数据&#xff0c;但是收集到的问卷应该如何分析呢&#xff1f;问卷一般可以分为两类&#xff1a;非量表类与量表类问卷。不同类型的问卷有不同的分析思路&#xff0c;今天和大家探讨一下拿到一份问卷后&#xff0c;一般的分析思…

Day 15 python学习笔记

__str__ 用print打印对象时&#xff0c;会自动调用 class Test:def __init__(self,name):self.name name# 用print打印对象时&#xff0c;会自动调用def __str__(self):return f"姓名name的值是{self.name}"a Test("zhangsan") print(a)结果&#xff1…

40+专家齐聚共谋数据未来,StarRocks Summit 2023 议程公布!更多精彩议题等你探索...

数字经济时代&#xff0c;什么才是企业的核心竞争力&#xff1f; 答案是数据。 在过去的一年里&#xff0c;越来越多的企业率先行动起来&#xff0c;加入这场数智化的进程中&#xff0c;探寻最佳的底层数据架构模式和极致的数据分析方案。 作为数据进化的亲历者&#xff0c;Sta…

软考_软件设计师

算法&#xff1a; 1、直接插入排序 详解&#xff1a;https://blog.csdn.net/qq_44616044/article/details/115708056 void insertSort(int data[],int n){int i,j,temp;for(i1;i<n;i){if(data[i]<data[i-1]){temp data[i];data[i] data[i-1];for(ji-1;j>0&&am…

OPPO Find N3,解码“新商务场景”

2023行至尾声&#xff0c;这一年消费电子市场的整体表现&#xff0c;很难被评价为乐观。智能手机等大宗产品的需求疲软&#xff0c;技术越来越同质化&#xff0c;产品越来越成熟&#xff0c;出货量下行。国际数据公司&#xff08;IDC&#xff09;手机季度跟踪报告显示&#xff…