要注意的地方
溢出错误
平常最常见的的写法应该是 (i+j)/2,注意这里有一个坑,因为 i 和 j 都是 int 类型,他们相加会有溢出风险
最优性能
位移运算比加减乘除性能更优,能用位运算时,要优先使用位运算
func Median1(i, j int) int{
//不严谨,有溢出风险
m := (i + j)/2
return m
}
func Median2(i, j int) int{
m := int(uint(i + j)/2)
return m
}
func Median3(i, j int) int{
//性能最优,cpu耗时最少,申请的内存最少
m := int(uint(i + j) >> 1)
return m
}