Golang每日一练(leetDay0080) 矩形面积、翻转二叉树

news/2024/10/23 9:25:19/

目录

223. 矩形面积 Rectangle Area  🌟🌟

226. 翻转二叉树 Invert Binary Tree  🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


223. 矩形面积 Rectangle Area

给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。

每个矩形由其 左下 顶点和 右上 顶点坐标表示:

  • 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。
  • 第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。

示例 1:

输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2
输出:45

示例 2:

输入:ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2
输出:16

提示:

  • -10^4 <= ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 <= 10^4

代码:

package mainimport ("fmt"
)func computeArea(ax1 int, ay1 int, ax2 int, ay2 int, bx1 int, by1 int, bx2 int, by2 int) int {area1 := (ax2 - ax1) * (ay2 - ay1)area2 := (bx2 - bx1) * (by2 - by1)overlapWidth, overlapHeight := 0, 0overlapWidth = min(ax2, bx2) - max(ax1, bx1)overlapHeight = min(ay2, by2) - max(ay1, by1)overlapArea := max(overlapWidth, 0) * max(overlapHeight, 0)return area1 + area2 - overlapArea
}func max(a, b int) int {if a > b {return a}return b
}func min(a, b int) int {if a < b {return a}return b
}func main() {ax1 := -3; ay1 := 0; ax2 := 3; ay2 := 4bx1 := 0; by1 := -1; bx2 := 9; by2 := 2fmt.Println(computeArea(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2))ax1 = -2; ay1 = -2; ax2 = 2; ay2 = 2bx1 = -2; by1 = -2; bx2 = 2; by2 = 2fmt.Println(computeArea(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2))
}

输出:

45
16


226. 翻转二叉树 Invert Binary Tree

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

示例 1:

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:

输入:root = [2,1,3]
输出:[2,3,1]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目范围在 [0, 100] 内
  • -100 <= Node.val <= 100

代码:

package mainimport "fmt"const null = -1 << 31type TreeNode struct {Val   intLeft  *TreeNodeRight *TreeNode
}func invertTree(root *TreeNode) *TreeNode {if root == nil {return nil}queue := []*TreeNode{root}for len(queue) > 0 {curr := queue[0]queue = queue[1:]left := curr.Leftcurr.Left = curr.Rightcurr.Right = leftif curr.Left != nil {queue = append(queue, curr.Left)}if curr.Right != nil {queue = append(queue, curr.Right)}}return root
}func buildTree(nums []int) *TreeNode {if len(nums) == 0 {return nil}root := &TreeNode{Val: nums[0]}Queue := []*TreeNode{root}idx := 1for idx < len(nums) {node := Queue[0]Queue = Queue[1:]if nums[idx] != null {node.Left = &TreeNode{Val: nums[idx]}Queue = append(Queue, node.Left)}idx++if idx < len(nums) && nums[idx] != null {node.Right = &TreeNode{Val: nums[idx]}Queue = append(Queue, node.Right)}idx++}return root
}func levelOrder(root *TreeNode) []int {res := []int{}if root == nil {return res}Queue := []*TreeNode{root}for len(Queue) > 0 {level := []int{}n := len(Queue)for i := 0; i < n; i++ {cur := Queue[0]Queue = Queue[1:]level = append(level, cur.Val)if cur.Left != nil {Queue = append(Queue, cur.Left)}if cur.Right != nil {Queue = append(Queue, cur.Right)}}res = append(res, level...)}return res
}func ArrayToString(arr []int) string {res := "["for i := 0; i < len(arr); i++ {res += fmt.Sprint(arr[i]) //对[]int数组可以用strconv.Itoa(arr[i])if i != len(arr)-1 {res += ","}}return res + "]"
}func main() {nums := []int{4, 2, 7, 1, 3, 6, 9}root := buildTree(nums)fmt.Println(ArrayToString(levelOrder(root)))root = invertTree(root)fmt.Println(ArrayToString(levelOrder(root)))nums = []int{2, 1, 3}root = buildTree(nums)fmt.Println(ArrayToString(levelOrder(root)))root = invertTree(root)fmt.Println(ArrayToString(levelOrder(root)))
}

输出:

[4,2,7,1,3,6,9]
[4,7,2,9,6,3,1]
[2,1,3]
[2,3,1]

递归法:

```Go
func invertTree(root *TreeNode) *TreeNode {
    if root == nil {
        return nil
    }
    left := invertTree(root.Left)
    right := invertTree(root.Right)
    root.Left = right
    root.Right = left
    return root
}
```


🌟 每日一练刷题专栏 🌟

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

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

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

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

 主页: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.ppmy.cn/news/100752.html

相关文章

二叉树与堆的解析

数的概念与结构 线性表&#xff1a;是一种具有n个相同特性的数据元素的有限序列。线性表逻辑上是线性结构&#xff0c;也就是连成的一条直线&#xff0c;但一条直线上的数据元素并不是一定要物理结构连续的。 讲到二叉树之前&#xff0c;我们要先了解一下什么是树&#xff0c;首…

感谢十二年的陪伴——分享回归,不忘初心(Eastmount博客总结及未来规划)

曾记否&#xff0c;2021年4月28日&#xff0c;为了更好地从事科研和学习&#xff0c;当时给所有读者群发了我在CSDN唯一的私信&#xff0c;感谢大家十年的陪伴&#xff0c;短暂消失&#xff0c;不负青春。当时也收到了很多博友的鼓励与祝福&#xff0c;感恩。 是啊&#xff01…

C语言基础:翁恺笔记

英尺英寸换算米案例&#xff1a; #include <stdio.h>int main() {int inch0,foot0;printf("请输入身高的英尺和英寸\n");scanf("%d %d",&inch,&foot);printf("身高是%f米",(inchfoot/12)*0.3048);return 0; } 总结&#xff1a;…

【Vue3】滑动验证组件 | 滑动验证

前言 滑块验证不只判断是否滑动到尾部&#xff0c;真正的目的是检测用户行为&#xff0c;检测行为是人为、脚本、还是其它。 防止使用脚本大量注册、请求等 。比如发送请求时&#xff0c;判断用户在某个页面停留了多长时间。登录、注册时是否点击了登录、注册按钮&#xff0c;…

利用宝塔服务器面板快速搭建PHP运行环境

目录 宝塔面板介绍 安装面板 环境配置 如果需要进行php开发&#xff0c;开发环境少不了。 这个环境主要有两种&#xff0c;一是编辑器或IDE&#xff0c;一是服务器的运行环境。 编辑器常用的有vscode、sublime、phpstorm、hbuilder等都可以&#xff0c;这个也比较简单&…

【利用AI让知识体系化】7种结构型模式

文章目录 结构型模式简介适配器模式装饰器模式代理模式外观模式桥接模式组合模式享元模式 结构型模式 简介 在设计模式中&#xff0c;结构型模式用于描述如何将对象和类组装成较大的结构&#xff0c;并灵活地处理对象之间的关系。 结构型模式包括以下几种&#xff1a; 适配器…

「SQL面试题库」 No_81 查询球队积分

&#x1f345; 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起&#xff0c;全员免费参与的SQL学习活动。我每天发布1道SQL面试真题&#xff0c;从简单到困难&#xff0c;涵盖所有SQL知识点&#xff0c;我敢保证只要做完这100道题&#xff0c;不仅能轻松搞定面试&#xff0…

TatukGIS Developer Kernel 11.78 for .NETCore Crack

Tatuk GIS Developer Kernel for .NET 是一个变体&#xff0c;它是受控代码和 .NET GIS SDK&#xff0c;用于为用户 Windows 操作系统创建 GIS 专业软件的过程。它被认为是一个完全用于 Win Forms 的 .NET CIL&#xff0c;WPF 的框架是为 C# 以及 VB.NET、VC、oxygen 以及最终与…