今天面试官现场出了一个面试题,刚开始想用队列,后面灵机一动想到这种方式,当时说了解题思路,回来用golang实现了一下。
package main/**** 给定一组数据,找出第一个没有重复的数***/import ( "fmt")func main() { data := [6]float64{30.2, 31.5, 32.5, 31.5, 30.5, 30.2} val := getFirst(data[0:]) fmt.Println(val)}func getFirst(data []float64) float64 { if len(data) == 0 { return -1 } intData := make([]int64, len(data)) var max, min int64 /*** * 找出最大, 最小值,对小数整形化 **/ for index, val := range data { tempVal := int64(val * 10) intData[index] = tempVal if max == 0 { max = tempVal } if min == 0 { min = tempVal } if max < tempVal { max = tempVal } if min > tempVal { min = tempVal } } /*** * 构建去重数组 **/ bitList := make([]int16, max-min+1) for _, val := range intData { bitList[val-min] += 1 } /*** * 找出第一个没有重复的数 **/ for index, val := range data { if bitList[intData[index]-min] == 1 { return val } } return -1}