leetcode 设计题 Constructor构建
在面向对象编程中,构造函数通常用于创建新对象并初始化其属性。对于 LeetCode 样例题目 “Design Parking System” 中的 ParkingSystem 结构体,可以这样编写 Constructor 方法: 123456789type ParkingSystem struct { carNums map[int]int // 记录每种停车位的数量}func Constructor(big int, medium int, small int) ParkingSystem { return ParkingSystem{ carNums: map[int]int{1: big, 2: medium, 3: small}, // 初始化 carNums 映射 }} 在这个实现中,我们使用传递给 Constructor 方法的三个整数参数来初始化 ParkingSystem 结构体的属性。具体而言,我们使用 map[int]int 类型的...
Go语言-copy
在 Go 语言中,copy 函数可以用于将一个切片(slice)的元素复制到另一个切片中。它的定义如下: 1func copy(dst, src []Type) int 其中 dst 是目标切片,src 是源切片,Type 表示元素类型。函数返回值是复制的元素个数,即 len(src) 和 len(dst) 中较小的那个。 使用 copy 函数删除数组或切片中的元素,需要用到 append 函数和 copy 函数一起操作。具体步骤如下: 123456789// 定义一个包含元素的数组a := [5]int{1, 2, 3, 4, 5}// 定义要删除的元素下标index := 2// 利用 append 函数和 copy 函数删除指定下标的元素copy(a[index:], a[index+1:])a = a[:len(a)-1]// 打印删除后的数组fmt.Println(a) // 输出 [1 2 4 5] 上述代码中,首先定义一个包含 5 个元素的整型数组 a 和要删除的元素下标 index。然后调用 copy 函数将第 index+1...
Go语言-byte和rune 有什么区别 byte rune 转为int
在 Go 语言中,byte 和 rune 都是用来表示字符类型的数据类型。 byte 是 uint8 的别名,在 Go 中通常用于表示 ASCII 字符集中的一个字节。rune 是 int32 的别名,在 Go 中通常用于表示 Unicode 字符集中的一个代码点。因此,对于 ASCII 字符来说,byte 和 rune 的值是相同的,但是对于大部分 Unicode 字符来说,它们是不同的。 将 byte 或 rune 转换为 int 可以使用类型转换操作符: 123456b := byte('0')i := int(b) - int('0') // 将 byte '0' 转换为 int 0// 上边可以简写为i := b - '0'r := rune('中')i := int(r) // 将 rune '中' 转换为 int 类型(其实是它的 Unicode 码点) 将 int 转换为 byte 或 rune...
Leetcode 200.岛屿数量
200. 岛屿数量 - 力扣(Leetcode) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051// 1 岛屿,0 海水, 见到岛屿则使用dfs 淹了这个所有1相连的岛屿,res++func numIslands(grid [][]byte) int { res := 0 r := len(grid) c := len(grid[0]) visited := make([][]byte, r) for i := 0; i < r; i++ { visited[i] = make([]byte, c) } // 遍历二维slice for i := 0; i < r; i++ { for j := 0; j < c; j++ { // 每个位置 if grid[i][j] == '1' { ...
结构体指针作为map key 结构体值改变对map有影响吗
最近偶然用到了结构体指针作为map key 的场景。当时有点不太确定:go 语言使用map 时使用指针p作为key, 那修改指针p的值之后。这map 还包含p 吗?接下来让我们一起看看: 当将指针作为 Map 的 Key 时,实际上是把指针的值作为键来进行插入和查找操作。因此,如果修改了该指针所指向的变量的值,那么并不会影响已经添加到 Map 中的键。因为这个指针仍然具有相同的值,所以它可以被用作一个标识符来检索和操作存储在Map中的数据 例如,以下代码定义了一个map[*int]string类型的映射,将指针p用作key来插入和索引数据: 123456789101112131415161718package mainimport "fmt"func main() { m := make(map[*int]string) x := 1 p := &x m[p] = "A" // 添加数据 fmt.Println(m) // map[0xc000016088:A] *p = 2 //...
Go语言删除指定索引元素
在Go语言中,可以使用切片的操作和 append 函数来删除特定索引的元素。 以下是一个示例代码,它演示了如何删除切片中索引值为 i 的元素: 12345678910111213package mainimport "fmt"func main() { a := []int{1, 2, 3, 4, 5} i := 2 // 要删除的索引 // 将要删除的元素从原始切片中删除,并返回剩下的元素组成的新切片 b := append(a[:i], a[i+1:]...) fmt.Println(b) // 输出 [1 2 4 5]} 在上面的代码中,我们定义了一个整数切片 a,包含 1、2、3、4、5 五个元素。然后我们定义要删除的元素的索引位置 i 为 2(即第三个元素)。 接下来,我们使用 append 函数和切片切割(slice expression)操作,在 a[:i] 和 a[i+1:] 中间加入空白符号 (…),以便将包含 a[i] 元素的子切片略过。也就是说,这个表达式等价于前...
Go语言指定索引插入元素
在Go语言中,可以使用切片(slice)的 append 函数和切片的切割(slice expression)操作来在指定索引位置插入元素。 下面是一个示例代码,它插入一个元素到切片的第二个位置: 12345678910package mainimport "fmt"func main() { a := []int{1, 2, 3, 4} i := 1 // 要插入的位置 b := append(a[:i], append([]int{5}, a[i:]...)...) // 在切片的第二个位置插入数字5 fmt.Println(b) // 输出 [1 5 2 3 4]} 在上面的代码中,我们首先定义了切片 a,包含整数 1、2、3、4。然后我们定义要插入的位置 i 为第二个元素(也就是索引值为 1)。 接着,在 append 函数中,我们将原始切片 a 切割成两部分:从起始位置到插入位置的子切片 a[:i],和从插入位置到末尾的子切片...
leetcode 108.将有序数组转换为二叉搜索树
108. 将有序数组转换为二叉搜索树 - 力扣(Leetcode) 递归解法注意递归函数的返回值和输入值,确定终止条件,确定单层递归逻辑注意递归函数定义,严格按照定义调用递归使用前序遍历 中左右 123456789101112131415161718192021222324/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func sortedArrayToBST(nums []int) *TreeNode { return traversal(nums,0,len(nums)-1)}// 定义:返回nums root 节点func traversal(nums []int,left int , right int) *TreeNode{ if left > right { ...
Go语言-接口
在 Go 语言中,接口(interface)是一种类型,它定义了对象的行为规范,即定义了一组方法签名,而不需要指定具体的实现。接口使得不同的类型可以通过实现相同的方法集合来进行互换使用。 以一个简单的例子来说明接口的作用,在下面这段代码中,接口Printer定义了一个打印的方法Print(): 123456789101112131415161718192021222324type Printer interface { Print()}type User struct { name string}func (u User) Print() { fmt.Println(u.name,"我爱加班")} func printAll(ps []Printer) { for _, p := range ps { p.Print() }}func main() { var ps []Printer ps =...