Golang每日一练(leetDay0104) 最小高度树、戳气球

news2025/1/2 4:39:09

目录

310. 最小高度树 Minimum Height Trees  🌟🌟

312. 戳气球 Burst Balloons  🌟🌟🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


310. 最小高度树 Minimum Height Trees

树是一个无向图,其中任何两个顶点只通过一条路径连接。 换句话说,一个任何没有简单环路的连通图都是一棵树。

给你一棵包含 n 个节点的树,标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表(每一个边都是一对标签),其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间存在一条无向边。

可选择树中任何一个节点作为根。当选择节点 x 作为根节点时,设结果树的高度为 h 。在所有可能的树中,具有最小高度的树(即,min(h))被称为 最小高度树 。

请你找到所有的 最小高度树 并按 任意顺序 返回它们的根节点标签列表。

树的 高度 是指根节点和叶子节点之间最长向下路径上边的数量。

示例 1:

输入:n = 4, edges = [[1,0],[1,2],[1,3]]
输出:[1]
解释:如图所示,当根是标签为 1 的节点时,树的高度是 1 ,这是唯一的最小高度树。

示例 2:

输入:n = 6, edges = [[3,0],[3,1],[3,2],[3,4],[5,4]]
输出:[3,4]

提示:

  • 1 <= n <= 2 * 10^4
  • edges.length == n - 1
  • 0 <= ai, bi < n
  • ai != bi
  • 所有 (ai, bi) 互不相同
  • 给定的输入 保证 是一棵树,并且 不会有重复的边

代码:

package main

import "fmt"

func findMinHeightTrees(n int, edges [][]int) []int {
	if n == 1 {
		return []int{0}
	}
	//创建邻接列表
	edgesmap := make([]map[int]bool, n)
	for i := 0; i < n; i++ {
		edgesmap[i] = make(map[int]bool)
	}
	for _, edge := range edges {
		edgesmap[edge[0]][edge[1]] = true
		edgesmap[edge[1]][edge[0]] = true
	}
	// 处理叶节点
	leaves := []int{}
	for i := 0; i < n; i++ {
		if len(edgesmap[i]) == 1 {
			leaves = append(leaves, i)
		}
	}
	// 最小高度的树
	for n > 2 {
		n -= len(leaves)
		newLeaves := []int{}
		for _, i := range leaves {
			var j int
			for j = range edgesmap[i] {
				break
			}
			delete(edgesmap[j], i)
			if len(edgesmap[j]) == 1 {
				newLeaves = append(newLeaves, j)
			}
		}
		leaves = newLeaves
	}

	return leaves
}

func main() {
	n := 4
	edges := [][]int{{1, 0}, {1, 2}, {1, 3}}
	fmt.Println(findMinHeightTrees(n, edges))

	n = 6
	edges = [][]int{{3, 0}, {3, 1}, {3, 2}, {3, 4}, {5, 4}}
	fmt.Println(findMinHeightTrees(n, edges))
}

输出:

[1]

[3 4]

相关:

263. 丑数 Ugly Number I  🌟

264. 丑数 Ugly Number II  🌟🌟


312. 戳气球 Burst Balloons

有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。

现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。

求所能获得硬币的最大数量。

示例 1:

输入:nums = [3,1,5,8]
输出:167
解释:
nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> []
coins =  3*1*5    +   3*5*8   +  1*3*8  + 1*8*1 = 167

示例 2:

输入:nums = [1,5]
输出:10

提示:

  • n == nums.length
  • 1 <= n <= 300
  • 0 <= nums[i] <= 100

代码:

package main

import "fmt"

func maxCoins(nums []int) int {
    n := len(nums)
    // 添加两个边界
    newNums := make([]int, n+2)
    newNums[0], newNums[n+1] = 1, 1
    for i := 1; i <= n; i++ {
        newNums[i] = nums[i-1]
    }
    // 定义dp数组
    dp := make([][]int, n+2)
    for i := range dp {
        dp[i] = make([]int, n+2)
    }
    // 状态转移
    for l := 3; l <= n+2; l++ { // 区间长度,从3开始
        for i := 0; i+l-1 <= n+1; i++ { // 起始点
            j := i + l - 1 // 结束点
            for k := i+1; k < j; k++ { // 最后被扎破的气球
                dp[i][j] = max(dp[i][j], dp[i][k]+dp[k][j]+newNums[i]*newNums[k]*newNums[j])
            }
        }
    }
    return dp[0][n+1]
}

func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}

func main() {
    nums1 := []int{3,1,5,8}
    fmt.Println(maxCoins(nums1))

    nums2 := []int{1,5}
    fmt.Println(maxCoins(nums2))
}

输出:

167
10


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Rust每日一练 专栏

(2023.5.16~)更新中...

Golang每日一练 专栏

(2023.3.11~)更新中...

Python每日一练 专栏

(2023.2.18~2023.5.18)暂停更

C/C++每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Java每日一练 专栏

(2023.3.11~2023.5.18)暂停更

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

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

相关文章

MindSpore-TOOD模型权重迁移推理对齐实录

准备工作 环境&#xff1a; wsl2 Ubuntu 20.04 mindspore 2.0.0 python 3.8 pytorch 2.0.1 cpu 基于自己编写的mindspore TOOD项目和MMDetection实现的pytorch权重来做迁移&#xff0c; TOOD论文pytorch mmdetection实现 tood_r50_fpn_1x_coco权重 论文中的代码也是用mmdet…

浅谈前后端交互的基本原理

本文受众人群&#xff1a; 前端/后端开发工程师&#xff1b;Web应用程序设计师&#xff1b;项目经理&#xff1b;产品经理等。 为什么要去了解&#xff1f; 了解前后端交互的基本原理对于从事与Web开发相关的角色的人群是非常重要的。这包括前端开发工程师、后端开发工程师、全…

【Java高级语法】(十三)注解:解码程序设计中的元数据利器,在小小的@符里挖呀挖呀挖~用小小的注解做强大的开发...

Java高级语法详解之注解 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 元注解3.2 自定义注解3.3 常用内置注解 4️⃣ 应用场景5️⃣ 扩展&#xff1a;那些流行框架中的注解&#x1f33e; 总结 1️⃣ 概念 Java 注解&#xff08;Annotation&#xff09; 是Java语言中一种元数据形式…

chatgpt赋能python:Python爬虫速度分析:如何加速你的爬虫?

Python爬虫速度分析&#xff1a;如何加速你的爬虫&#xff1f; Python作为一种优秀的胶水语言&#xff0c;被广泛应用于web开发、数据处理等众多领域。在众多应用场景中&#xff0c;Python爬虫无疑是其中之一。然而&#xff0c;在爬取海量数据时&#xff0c;爬虫的速度往往成为…

Arthas原理分析

在日常开发中&#xff0c;经常会使用到arthas排查线上问题&#xff0c;觉得arthas的功能非常强大&#xff0c;所以打算花了点时间了解一下其实现原理。并试着回答一下使用Arthas时存在的一些疑问。 Arthas主要基于是Instrumentation JavaAgent Attach API ASM 反射 OGNL等…

chatgpt赋能python:Python点的用法

Python点的用法 作为一名有着10年Python编程经验的工程师&#xff0c;我发现很多初学者对Python的点(.)用法存在疑惑。因此&#xff0c;在这篇文章中&#xff0c;我将详细介绍Python点的用法&#xff0c;并希望能够对这个问题有一个全面的认识。 什么是点 在Python中&#x…

Linux Xshell配置public key实现免密登录linux服务器

linux服务器安装成功后&#xff0c;登录linux服务器的工具有很多中&#xff0c;例如&#xff1a;Xshell、SecureCRT等等。而我所服务的用户使用xshell工具来对linux服务器进行运维。 当使用xshell登录linux服务器时&#xff0c;xshell提供了三种身份验证方式&#xff1a; 1.P…

实战:Maven构建工具实践-2023.6.21(测试成功)

实战&#xff1a;Maven构建工具实践-2023.6.21(测试成功) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 实验环境 gitlab/gitlab-ce:15.0.3-ce.0 jenkins/jenkins:2.346.3-2-lts-jdk11 apache-maven-3.9.2 openjdk 11.0.18实验软件 链接&…

对centOS的home目录进行扩容。

对centos的home目录进行扩容 1 首先要了解PV\VG\LV的含义1.1 基本概念1.2 基本命令行 2 实际操作2.1 盘符当前现状2.1实操 1 首先要了解PV\VG\LV的含义 1.1 基本概念 物理卷&#xff08;Physical Volume&#xff0c;PV&#xff09; 指磁盘分区或从逻辑上与磁盘分区具有同样功能…

SPSS统计教程:卡方检验

本文简要的介绍了卡方分布、卡方概率密度函数和卡方检验&#xff0c;并通过SPSS实现了一个卡方检验例子&#xff0c;不仅对结果进行了解释&#xff0c;而且还给出了卡方、自由度和渐近显著性的计算过程。本文用到的数据"2.2.sav"链接为: https://url39.ctfile.com/f/…

菲涅尔圆孔衍射matlab完整程序分享

根据惠更斯 &#xff0d; 菲涅耳原理&#xff0c;光的衍射是光束内部的次波之间的相干叠加&#xff0c;衍射光波场的光振动符合菲涅耳积分公式。但直接运用菲涅耳积分公式计算衍射光场是很困难的。对于夫琅和费衍射(远场衍射)&#xff0c;在光源和接收屏距离衍射屏均为无穷远的…

实战:k8s证书续签-2023.6.19(测试成功)

实战&#xff1a;k8s证书续签-2023.6.19(测试成功) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 1、前言 k8s集群核心的证书有2套&#xff0c;还有1套非核心的(即使出问题也问题不大)。 ⚠️ 如果是kubeadm搭建的k8s集群&#xff0c;其有效期为…

chatgpt赋能python:Python烧录单片机:快速的开发工具

Python烧录单片机&#xff1a;快速的开发工具 简介 Python是一种高级的编程语言&#xff0c;被广泛应用于各种领域&#xff0c;包括机器学习、数据分析和物联网等领域。Python的易用性和简洁性已经成为其成功的关键因素之一。Python也能在烧录单片机时提供极大的方便性和灵活…

chatgpt赋能python:用Python自动爬取链接的内容——提升SEO效果的利器

用Python自动爬取链接的内容——提升SEO效果的利器 在当今数字化时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;对于任何一个网站来说都至关重要。一种有用的SEO策略就是频繁地更新网站内容&#xff0c;吸引更多的访问者和搜索引擎爬虫。而最快捷的方法就是自动爬取…

chatgpt赋能python:Python爬虫解密:如何快速抓取网站数据

Python爬虫解密&#xff1a;如何快速抓取网站数据 在当今信息时代&#xff0c;人们越来越依赖互联网获取信息。不同的网站提供了大量数据&#xff0c;但是手动去抓取这些数据十分困难&#xff0c;效率也很低。Python爬虫技术是解决这一问题的有效工具之一&#xff0c;它可以帮…

使用npm安装pnpm包管理器

使用npm安装pnpm包管理器 一、安装 使用 npm install pnpm -g 命令安装pnpm npm install pnpm -g安装完成之后&#xff0c;使用pnpm -v命令查询是否成功安装&#xff0c;出现版本号即可 二、设置源 1.先查看源是否为淘宝的源 pnpm config get registry 2.设置源命令 pn…

TS:pip安装python库报ssl错误-2023.6.17(已解决)

2023.6.17-TS-pip安装python库报ssl错误(已解决) 目录 文章目录 2023.6.17-TS-pip安装python库报ssl错误(已解决)目录报错现象报错环境测试过程换其他源还是报错&#xff08;失败&#xff09;百度&#xff1a;替换为豆瓣源并加--trusted-host参数(成功) 参考文章关于我最后 报错…

一文理解多线程机制和多线程的优缺点

一文理解多线程机制 前言&#xff1a;多线程的优缺点。一、什么是多线程1.1、多线程的概念和基本原理1.2、多线程与单线程的区别 二、多线程的应用场景三、C 中的多线程3.1、C11 新增加的 thread 库3.2、C 线程同步机制&#xff08;mutex、condition_variable&#xff09; 四.、…

【Openvino01】Ubuntu安装inter的openvino2022.1以及遇到的各种错误解决

交代一下今天的文章背景&#xff1a; 于最近要使用inter的一款名为Intel Movidius™ Myriad™ X 的加速卡去实现对算法模型的加速推理能力&#xff0c;由于是就得第一步安装openvino&#xff0c;然后再使用卡去验证openvino是否安装ok&#xff0c;卡是否真的存在推理加速的能力…

python pytorch教程-带你从入门到实战(代码全部可运行)

python pytorch教程-带你从入门到实战&#xff08;代码全部可运行&#xff09; 其实这个教程以前博主写过一次&#xff0c;不过&#xff0c;这回再写一次&#xff0c;打算内容写的多一点&#xff0c;由浅入深&#xff0c;然后加入一些实践案例。 下面是我们的内容目录&#x…