找到一组数据中第一个没有重复的数字-一个面试题

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

posted @ 2018-08-21 22:43  骨头  阅读(657)  评论(0编辑  收藏  举报