返回

Go入门-算法

基本语法

Go 圣经

常用库

切片

go 通过切片模拟栈和队列

1
2
3
4
5
6
7
8
9
// 创建栈
stack := make([]int, 0)
// push压入
stack = append(stack, 10)
// pop弹出
v := stack[len(stack)-1]
stack = stack[:len(stack)-1]
// 检查栈空
len(stack) == 0

队列

1
2
3
4
5
6
7
8
9
// 创建队列
queue := make([]int, 0)
// enqueue入队
queue = append(queue, 10)
// dequeue出队
v := queue[0]
queue = queue[1:]
// 检查队空
len(queue) == 0

注意:默认 s=s[0 : len(s)],取下限不取上限,前闭后开,数学表示为:[ )

字典

基本用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 创建
m := make(map[string]int)
// 设置kv
m["hello"] = 1
// 删除k
delete(m, "hello")
// 遍历
for k, v := range m{
    println(k, v)
}

注意

  • map 键需要可比较,不能为 slice、map、function
  • map 值都有默认值,可以直接操作默认值,如:m[age]++ ,值由 0 变为 1
  • 比较两个 map 需要遍历其中的 kv 是否相同,因为有默认值关系,所以需要检查 val 和 ok 两个值

标准库

sort

1
2
3
4
5
6
7
8
// int排序
sort.Ints([]int{})
// 字符串排序
sort.Strings([]string{})
// 自定义排序
sort.Slice(s, func(i, j int) bool {
    return s[i] < s[j] // 小的在前,升序
})

math

1
2
3
4
5
6
// int32 最大最小值
math.MaxInt32 // 实际值:1<<31-1
math.MinInt32 // 实际值:-1<<31
// int64 最大最小值(int默认是int64)
math.MaxInt64
math.MinInt64

copy

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 删除a[i]: 用 copy 将i+1到末尾的值前移一个单位,然后更新长度
copy(a[i:], a[i+1:])
a = a[:len(a)-1]

// make创建切片时指定具体长度,则通过索引赋值
a := make([]int, n)
a[0] = x
// make创建切片时指定长度为0,则通过append()追加元素
a := make([]int, 0)
a = append(a, x)

常用技巧

类型转换

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
s = "12345"  // s[0] 类型是byte(字符串通过索引下标访问的字符是字节型)

num := int(s[0] - '0') // 1 (byte -> int)
b := byte(num + '0') // '1' (int -> byte)

str := string(s[0]) // "1" (byte -> string)
b := byte(str) // '1' (string -> byte)

bs := []byte(s) // ['1', '2', ... , '5'] (string -> []byte)
str := string(bs) // "1" ([]byte -> string)

// 字符串 <-> 数字
num, err := strconv.Atoi() // 字符串转数字可能会失败
str := strconv.Itoa() // 数字 -> 字符串

刷题注意点

  • leetcode 中,全局变量不要当做返回值,否则刷题检查器会报错
  • 全局变量需要在函数体中重新初始化,不然变量值会在下一用例中继续使用
Built with Hugo
Theme Stack designed by Jimmy