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
相关产品推荐
相关产品推荐

