Math
import("math"
)
// 比较大小 a,b float64 其他的最大最小得自己实现
Math.max(a,b)
Math.min(a,b)
// 最大数 最小数
math.MaxInt64
math.MinInt64
math.Sqrt(5) // 开方 返回float64
math.Pow(a,b) // 求幂 参数都是float64
sort & 排序
// 排序
sort.Ints(nums)
sort.Float64s(floats)
sort.Strings(strs)
sort.Float64sAreSorted(floats)
// 自定义排序
sort.Slice(stus, func(i, j int) bool {return stus[i].Name < stus[j].Name
})
// 排序搜索
// [0,n)中取出一个值index,index是最小的能使f为true的值,多用于排序好的数组查询
sort.Search(len(matrix),func(i int) bool{return matrix[i][0]>target})
// 返回等于x的下标中 最小的那个
// 或者 a < x < b b的下标
// 没找到会返回 len(g)
sort.SearchInts(g, x)
sort.IntSlice详解 自定义sort.IntSlice
a := sort.IntSlice{2, 8, 3, 7, 9, 4, 1, 6} // []int类型 可排序
a.Sort() // 调用排序方法 从小到大
初始化
// 切片
ans := make([][]int, 0)
// map
m:=map[byte]int{}
Map
m:=map[byte]int{}
m:=map[byte]int{'c':1,'a',2}
delete(m,'k')
v,ok := m[pre-k]
map['1'] // 如果找不到,返回0
for key, value := range occurrences {heap.Push(h, [2]int{key, value})
}
Slice
var q []int // 可以用append
q := make([][]int, 0)
q := []int{}
var (res []intq []intindexs []intedges [][]int
)
var mapping = [...]string{"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}
q = append(ans,i)
q = ans[:len(q)-1]
copy(q,ans) // 把ans复制给q
ans = append(ans, append([]int{}, path...)) // 数组复制
for i,v := range q
for i := range q
Heap
优先队列
23. 合并 K 个升序链表
示例:最小堆
295. 数据流的中位数
import ("container/heap"
)
// 使用
h := &hp{}
heap.Init(h) // 堆化,注意这里是传指针
heap.Push(h, [2]int{ke, v})
if h.Len() > k {heap.Pop(h)
}
*h[0] // 第0个是最小的(最小堆)
// 需要重写的方法 定义和方法 最小堆底层实际上是一个从大到小排序的数组
type hp []int
func (h hp) Len() int { return len(h) }
func (h hp) Less(i, j int) bool { return h[i] < h[j] } // 最小堆
func (h hp) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h *hp) Push(v interface{}) { h = append(h, v.(int)) }
func (h *hp) Pop() interface{} { // 每次push和pop的时候都会刷新堆a := *hv := a[len(a)-1]*h = a[:len(a)-1]return v
}
String
s string
len(s)
string(b) // byte[] -> string
_, c := range s // string底层是rune[]
byte(c) // rune -> byte
转化
float64(c1+c2)/2.0 // int->float64
1 + int(c -'0') // byte->int
"1"+string(c) // byte->string
For
for i++;nums[i]<partition;i++{} // = do i++; while();
位运算
a^a=a
0^a=a
single ^= num
strings.Builder{}
import("strings"
)
temp := strings.Builder{}
temp.WriteString('s') // 写入当前字符串
temp.String() // 更新当前字符串
键盘输入
reader := bufio.NewReader(os.Stdin)
reader.ReadString('\n')
atomic
atomic.AddInt64(&p.size, 1)
atomic.LoadInt64(&p.cap) // 读取