从零开始记录一下用 golang 刷 leetcode 的技巧

基础使用

常用方法

  • 遍历数组

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // for 循环
    for i := 0; i < len(nums); i++ {
    fmt.Println(nums[i])
    }

    // range 循环
    for i, num := range nums {
    fmt.Println(i, num)
    }

    // 区别
    // 1. 语法: for 循环需要手动管理索引,而 range 循环更简洁。
    // 2. 可读性: range 循环通常更容易理解。
    // 3. 性能: 两者性能差异不大,但 range 循环在某些情况下更高效。
    // 4. 元素访问: range 提供了直接访问元素值的方式。

数据结构

slice

slice 是一个动态数组,类似于 C++ 的 vector

  • 创建一个 slice

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 使用 make 创建空切片
    slice1 := make([]int, 0)

    // 使用字面量创建空切片
    slice2 := []int{}

    // 两者区别
    // 1. 长度与容量: make 可以直接指定长度和容量,适合已知长度的场景;字面量创建的切片则是空的。
    // 2. 性能: 使用 make 可以减少内存分配次数,提高性能,特别是在计划添加多个元素时。
    // 3. 初始化: make 创建的切片有默认值,而字面量创建的切片没有元素
  • 返回一个 slice

    1
    2
    // 返回 []int 为例
    return []int{1,2}

map

  • 创建一个 map

    1
    m := make(map[int]int)
  • 判断元素是否在 map 存在

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // 方法一
    dict := map[string]int{"key1": 1, "key2": 2}
    value, ok := dict["key1"]
    if ok {
    fmt.Printf(value)
    } else {
    fmt.Println("key1 不存在")
    }

    // 方法二
    dict := map[string]int{"key1": 1, "key2": 2}
    if value, ok := dict["key1"]; ok {
    fmt.Printf(value)
    } else {
    fmt.Println("key1 不存在")
    }

参考