在编写代码时,经常会遇到对一组数据过滤去除重复的数据,那么怎么来实现这样的一个功能函数呢?
例如:给定一个数组[1,2,3,1],去除重复的数据
我们放眼一看就知道1重复了,但计算机没有这样的水平,它需要将该问题转化为严密的逻辑计算和数值计算,才能得到正确的结果。
在转化为计算机可处理的过程,就需要用到算法和数据结构的知识。我们知道hashtable数据结构,它的keys是不能存在重重的,那么我们就可以将数组转化hashtable来解决。
示例代码:
func containsDuplicate(nums []int) (res []int) {
filter := make(map[int]bool, len(nums))
for _, num := range nums {
if !filter[num] {
filter[num] = true
res = append(res, num)
}
}
return res
}
通过以上的解析,即可完成leetcode217题
如果给定一个有序的切存在重复数据的数组,那么怎么能去除重复的数据 如:给定 nums = [0,0,1,1,1,2,2,3,3,4] 去除重复的数据
对于该问题,我们依然可以按照上边的那种方式进行处理,但由于这个数组是有序的,也就是重复的数据都聚集在一起,所以可以在循环中进行nums[i]和nums[i+1]的判断,不同时,将数据进行新的存储。
func removeDuplicates(nums []int) (res []int) {
length := len(nums)
count := length
if nums == nil && length == 0 {
return nil
}
res = append(res, nums[0])
for i := 0; i < length-1; i++ {
if nums[i] == nums[i+1] {
count--
} else {
res = append(res, nums[i+1])
}
}
return
}
参考以上代码,即可完成leetcode26题