前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据去重算法(一)

数据去重算法(一)

作者头像
暮雨
发布2019-08-21 10:12:54
2.5K0
发布2019-08-21 10:12:54
举报
文章被收录于专栏:云端漫步云端漫步

在编写代码时,经常会遇到对一组数据过滤去除重复的数据,那么怎么来实现这样的一个功能函数呢?

例如:给定一个数组[1,2,3,1],去除重复的数据

我们放眼一看就知道1重复了,但计算机没有这样的水平,它需要将该问题转化为严密的逻辑计算和数值计算,才能得到正确的结果。

在转化为计算机可处理的过程,就需要用到算法和数据结构的知识。我们知道hashtable数据结构,它的keys是不能存在重重的,那么我们就可以将数组转化hashtable来解决。

  1. 循环数组将数组元素映射到hashtable中
  2. 判断该元素是否存在hashtable中,存在说明该数据重复,不存在存入hashtable中

示例代码:

代码语言:javascript
复制
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]的判断,不同时,将数据进行新的存储。

代码语言:javascript
复制
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题

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云端漫记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档