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

本文介绍了一种使用Golang解决寻找数组中第一个不重复数字的方法。通过将浮点数整型化并利用位列表去除重复项,最终高效地找到目标数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://www.cnblogs.com/warrior/p/9514945.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值