今天面试官现场出了一个面试题,刚开始想用队列,后面灵机一动想到这种方式,当时说了解题思路,回来用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
}