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

news2024/11/17 23:33:01

目录

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/682115.html

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

相关文章

用自定义域名访问Tailscale节点

需求 tailscale 是好东西&#xff0c;在任何地方都可以和在局域网访问一样&#xff0c;但是也有着 IP 访问的不便&#xff0c;一方面 IP 是 tailscale 分配的&#xff08;非子网路由模式&#xff09;&#xff0c;另一方面还要记住各种端口 tailscale 也考虑到了这些问题&…

SpringBoot 使用 TestRestTemplate 进行 RESTful API 集成测试

SpringBoot 使用 TestRestTemplate 进行 RESTful API 集成测试 RESTful API 集成测试是测试应用程序与其外部依赖项之间的集成。SpringBoot提供了TestRestTemplate来测试RESTful API&#xff0c;本文将介绍如何使用TestRestTemplate进行RESTful API集成测试。 1. 什么是 TestR…

java File类 和 IO流

File类 文件和文件夹(文件路径)的抽象表示&#xff0c;是专门来出来磁盘上面的文件或文件夹的 构造方法 方法 返回boolean creatNewFile() 生成一个文件&#xff0c;当且仅当具有该名称的文件尚不存在时 public class Demo02 {public static void main(String[] args) th…

知了汇智网安项目实训助力高校实战型人才培养

当前&#xff0c;随着信息技术的高速发展和网络的普及应用&#xff0c;网络安全面临着日益复杂和严峻的挑战。恶意黑客、网络病毒、数据泄露等安全威胁不断涌现&#xff0c;给个人、企业和国家的信息资产和社会稳定带来了巨大风险。新形势之下&#xff0c;培养网络安全实战型人…

深眸科技受邀参加昆山元宇宙装备展与产业论坛,为工业视觉注智赋能

为落实《“十四五”数字经济发展规划》&#xff0c;进一步夯实元宇宙在终端装备领域的落地与拓展&#xff0c;江苏昆山将于6月27至29日&#xff0c;举办“2023元宇宙装备展”。本届展会由昆山市人民政府主办&#xff0c;昆山市工业和信息化局、赛迪工业和信息化研究院集团&…

力扣题库刷题笔记8--字符串转换正数(atoi)

1、题目如下&#xff1a; 2、个人Python代码实现如下&#xff1a; 这里可以看到&#xff0c;解答错误很多次&#xff0c;实际上就是对于题目的条件读的不够细&#xff0c;导致很多边界值的用例跑不过。而且个人习惯极其不好&#xff0c;没有输入各种可能的输入进行调试&#xf…

【计算机网络自顶向下】计算机网络期末自测题(一)答案

2019-2020 学年第 2 学期自测题答案及评分标准 (卷 1) 计算机网络 一、 填空题&#xff1a; 参考答案&#xff1a; 1 、 01000101 、11100111 3 、 100Mbps、双绞线、基带、全双工 [10Mbps 要求单位] 4 、 报文 5 、 ICMP 6 、 虚电路 7 、 距离矢量、链路状态 …

考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联合配置方法(matlab代码)

目录 1 主要内容 目标函数 电动汽车负荷建模 算例系统图 程序亮点 2 部分代码 3 程序结果 ​4 下载链接 1 主要内容 该程序复现博士文章《互动环境下分布式电源与电动汽车充电站的优化配置方法研究》第四章《考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联…

【抗扰PID控制】干扰抑制PID控制器研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Excel管理工具简陋但强大 vs 雷军为何说“没有设计是最好的设计

解密&#xff1a;雷军为何说“没有设计是最好的设计” 雷军洗白&#xff1a;没有刻意的设计才是最好的设计&#xff01; 有的人开发了10个到50个&#xff0c;甚至几百个Excel管理工具。每个工具里面有VBA代码几千行。 还有个高手&#xff0c;趁过年一个月左右时间完成一个公司用…

SAP ABAP DIALOG 表格控件的简单例子<转载>

本文是一个很见到的ALV表格控件例子&#xff0c;但是原文作者写的很详细&#xff0c;所以借过来一用&#xff0c;很适合新手练手用。在这里感谢原文作者大大&#xff01; 原文链接&#xff1a;https://mp.weixin.qq.com/s/bhP3w5DIADdf9P624C5kpw 表格控件是ABAP编程中最常用的…

0基础学习VR全景平台篇第48篇:高级功能-密码访问

功能位置示意 一、本功能将用在哪里&#xff1f; 密码访问功能&#xff0c;常用于暂未交付的项目&#xff0c;使用密码访问保护作品数据的私密性&#xff1b; 或为满足不同情境下的推广需求使用。 二、如何使用本功能&#xff1f; 1、选择-密码访问功能&#xff1b; 2、输入…

nvm使用大全nvm如何动态切换node版本

注意&#xff1a; nvm use node版本时&#xff0c;要使用管理员权限打开cmd输入命令&#xff0c;否则报错 常用命令 nvm ls &#xff1a;列出所有已安装的 node 版本 nvm list &#xff1a;列出所有已安装的 node 版本 nvm list available &#xff1a;显示所有可下载的版本 …

较旧系统的轻量级的LINUX发行版—FATDOG64

导读我们回顾FatDog64 Linux&#xff0c;这个轻量级的Linux发行版可能不是现代的&#xff0c;但它非常适合于老化的计算机&#xff0c;fatdog64 Linux是一个小而灵活的64位多用户Linux发行版。 有一个Linux发行版几乎每一个都需要&#xff0c;有Linux分布的黑客&#xff0c;天…

【NLP】Word2vec概念和演进史

一、说明 “万物都有一种模式&#xff0c;它是我们宇宙的一部分。它具有对称、优雅和优雅——这些品质你总能在真正的艺术家捕捉到的作品中找到。” ~ 沙丘 (1965) 对于word2vec&#xff0c;它不是一个或一种算法&#xff0c;而是一系列思想和算法的综合。本文通过有限篇幅&…

信创优选,国产开源,Solon v2.3.6 发布

Solon 是什么开源项目&#xff1f; 一个&#xff0c;Java 新的生态型应用开发框架。它从零开始构建&#xff0c;有自己的标准规范与开放生态&#xff08;历时五年&#xff0c;已有全球第二级别的生态&#xff09;。与其他框架相比&#xff0c;它解决了两个重要的痛点&#xff…

uniapp中小程序的生命周期

一、uni-app应用生命周期 函数名说明onLuaunch当uni-app 初始化完成时触发&#xff08;全局只触发一次&#xff09;onShow当 uni-app 启动&#xff0c;或从后台进入前台显示onHide当 uni-app 从前台进入后台onError当 uni-app 报错时触发onUniNViewMessage对 nvue 页面发送的数…

linux下查看某进程内有多少个线程的方法(ps、top、Htop)

文章目录 1 确认进程号2 方式一&#xff1a;ps&#xff08;查看指定进程内的线程情况&#xff09;3 方式2&#xff1a;使用top&#xff08;实时显示指定线程内各个线程情况&#xff09;4 方式3&#xff1a;使用htop5 传递signal给指定PID&#xff1a;kill -signal PID 1 确认进…

MySQL调优---文件排序(FileSort)详解

目录 产生 分类对比 产生情况 进行优化 产生 如果索引不能用于满足ORDER BY子句&#xff0c;MySQL将执行filesort读取表行并对它们进行排序的操作用Explain语句可以看到最后一列显示using filesortEXPLAIN展示的执行计划的Extra这个字段中的“Using filesort”表示的就是需…

DEV中TextEdit的keydown事件与click事件

DEV中TextEdit的keydown事件与click事件 gridview中加了一列textedit&#xff0c;并给其加了keydown事件&#xff0c;里面调用了另一个gridview1。 现在想给click事件也加上相同的功能&#xff0c;但是不管是复制相同的代码还是直接调用keydown事件&#xff0c;gridview1都调不…