为了让我记得更深刻<<<
恰逢遇到2023春招刷阿里、华为的机试题,采用ACM格式,自己构造输入输出,用golang敲了部分题后,做一部分的总结.
- 固定的输入格式(针对字符串型输入)
package main
import (
"bufio"
"os"
"fmt"
)
func main(){
input :=bufio.NewScanner(os.Stdin) // 多行输入
// 注意测试用例过长的话,要先指定bufio的bufer ,不然input.Scan会失败,读取空
// bufer :=make([]byte,2000*1024)
// input.Buffer(bufer,len(bufer))
for input.Scan(){
// 每调用一次Scan,从输入流中读取一行,相当于切换光标
str :=input.Text() // 获取这一行的输入
...
}
}
1.1 strings包
strings.IndexByte(str,byte) // 按照字符找位置
strings.Index(str,string) //按照字符串找位置
x :=[]rune(string) //将字符串转为切片
str :=string(x) //切片转为字符串
str :=fmt.Sprintf("%d个中国人吃%d个苹果",10,20) // 格式化字符串
1.2 strconv包
data,_ :=strconv.Atoi(str) //将字符串转为int类型
str,_ :=strconv.Itoa(int) //将整形转为string类型
str,_ :=strconv.ToLower(string) //全转为小写
//.ToUpper() //转为大写
// 解析字符串为整数,可以带符号 (string,进制,intX)
str,_ :=strconv.ParseInt("-2",10,64)
//解析字符串为浮点型 (string,floatX) X表示32或者64
str,_ :=strconv.ParseFloat("0.236",64)
1.3 sort包
sort.Ints([]int) // 直接从小到大排序整形切片
1.4 ascii码
48 表示 0
65 表示 A
97 表示 a
1.5 散列表
除留余数法
H(key) = key % mod 就是把可能是很大的key转化为 不超过mod的整数。
将一堆key映射成下标范围在[0,mod]中,mod通常取素数
但是会出现key1和key2映射在同一个下标的情况,也就是出现冲突
冲突解决办法:
1)线性探测法
H(key) 冲突,则检测H