You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang实现数组重复值检测:未知长度切片读取的替代方案

在Go中复现JavaScript数组重复值检测算法的问题与解决

我尝试在Golang中复现一段检测数组重复值的JavaScript算法,原JavaScript代码如下:

function hasDuplicateValue(array) {
  let existingNumbers = [];
  for(let i = 0; i < array.length; i++) {
    if(existingNumbers[array[i]] === 1) {
      return true;
    } else {
      existingNumbers[array[i]] = 1;
    }
  }
  return false;
}

该算法通过创建未知长度的空数组existingNumbers,将每个已找到的数值对应索引位置设为1以标记其已出现。但Golang中的切片需要预先分配内存才能读取,我有两个疑问:

  • 是否需要先找出数组最大值来初始化existingNumbers切片?
  • 有没有更高效的实现方式?

后续我意识到无法用切片实现该逻辑,经@icza建议,改用map来实现,代码如下:

func findDuplicates(list []int) bool {
    temp := make(map[int]int)
    for _, elem := range list {
        if temp[elem] == 1 {
            return true
        } else {
            temp[elem] = 1
        }
    }
    return false
}

内容的提问来源于stack exchange,提问作者bugsyb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:31:02