Go 刷题技巧
Go 数据类型
栈
// 创建栈
stack:=make([]int,0)
// push压入
stack=append(stack,10)
// pop弹出
v:=stack[len(stack)-1]
stack=stack[:len(stack)-1]
// 检查栈空
len(stack)==0
队列
// 创建队列
queue:=make([]int,0)
// enqueue入队
queue=append(queue,10)
// dequeue出队
v:=queue[0]
queue=queue[1:]
// 长度0为空
len(queue)==0
深拷贝
在回溯中经常需要添加路径等信息,当数组中添加切片的时候,需要注意对切片深拷贝
ans = append(ans, path) // 错误做法
// 正确做法
tmp = make([]int, len(path))
copy(tmp, path)
ans = append(ans, tmp)
Go 排序
基础排序
// int排序
sort.Ints([]int{})
// 字符串排序
sort.Strings([]string{})
自定义排序,
sort.Slice(s, func(i,j int) bool {return s[i]<s[j]})
// 第一个元素正排,第二个元素倒排
sort.Slice(nums, func(i, j int) bool {
if nums[i][0] == nums[j][0] {
return nums[i][1] > nums[j][1] // 倒排
}
return nums[i][0] < nums[j][0] // 正排
})
Go min/max 函数
整数最大最小值
// int32 最大最小值
math.MaxInt32 // 实际值:1<<31-1
math.MinInt32 // 实际值:-1<<31
// int64 最大最小值(int默认是int64)
math.MaxInt64
math.MinInt64
简单 min/max 实现
func min (a, b int) int {
if a > b {
return b
}
return a
}
不定参数的 min/max 实现
func min (nums ...int) {
minValue = math.MaxInt64
for _, num := nums {
if num < minValue {
minValue = num
}
}
return minValue
}
// 调用
min(3, 4, 2, 7)