go实现输出数组里第二小的数

package main

import (
	"fmt"
)

const INT_MAX = int(^uint(0) >> 1)

// 0000 0000 => 1111 1111 => (int)0111 1111
const INT_MIN = ^INT_MAX // 0111 1111 => 1000 0000

func main() {
	var arr = [5]int{1, 3, 3, 9, 2}
	var minNum [2]int
	minNum[0] = INT_MAX
	minNum[1] = INT_MIN

	for i := 0; i < len(arr); i++ {
		if minNum[0] > arr[i] {
			minNum[1] = minNum[0] //出现更小的,赋给[0],原来的赋给[1]
			minNum[0] = arr[i]
		} else if minNum[1] > arr[i] { //出现比第二小的,小的
			minNum[1] = arr[i]
		}
	}
	fmt.Println(minNum[1])
}

遍历一遍就可以了,找到最小的值赋给minNum[0],第二小的赋给[1]。

const INT_MAX = int(^uint(0) >> 1)
无符号 int 0的补码,先取反,再右移一位,强转,成有符号 int。即为最大值 int。
0000 0000 => 1111 1111 => (int)0111 1111

最大值取反,得到最小值的补码。原码是 - 1111111…
0111 1111 => 1000 0000


版权声明:本文为weixin_44883180原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。