golang使用map实现去除重复数组


Posted in Golang onApril 14, 2022

golang数组去重利用map

可以利用go中,map数据类型的key唯一的属性,来对数组去重

将strSlice数组中重复的元素去掉,使其中的元素唯一

var strMap make(map[string]string)
strSlice := []string {"slice","int","string","int","boolean","string"}
for _,v:= range strSlice{
    strMap[value] = v
}
//strMap为:{"slice":"slice","int":"int","string":"string","boolean":boolean"}
//如果想将map转换为slice,可利用数组的append函数
var secondStr []string
for _,value := range strMap{
    secondStr = append(secondStr ,value)
}
//secondStr为:{"slice","int","string","boolean"}

golang删除排序数组中的重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

给定数组 nums = [1,1,2], 

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 

你不需要考虑数组中超出新长度后面的元素。

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

你不需要考虑数组中超出新长度后面的元素。

首先理解题意:

  • 当给定数组为空的时候就应该返回0
  • 而且不能引入其他数组空间,那就是不能再使用一个新的数组来存放结果
  • 还要不重复,数组中超出新长度后面的元素无视

那我们就可以用快慢指针的思想来解答这道题了

  • 给定两个游标left和right
  • 当给定数组的下标为left和right的值一样的话,就不管
  • 当不一样的话,那我们就要做一个操作,就是把当前right下标的值给到left下一个下标

具体代码:

func removeDuplicates(nums []int) int {
    //如果是空切片,那就返回0
    if len(nums) == 0 {
        return 0
    }
    //用两个标记来比较相邻位置的值
    //当一样的话,那就不管继续
    //当不一样的时候,就把right指向的值赋值给left下一位
    left, right := 0, 1
    for ; right < len(nums); right++ {
        if nums[left] == nums[right] {
            continue
        }
        left++
        nums[left] = nums[right]
    }
    fmt.Println(nums[:left+1])
    return left + 1
}
Golang 相关文章推荐
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
golang协程池模拟实现群发邮件功能
May 02 Golang
浅谈golang 中time.After释放的问题
May 05 Golang
再次探讨go实现无限 buffer 的 channel方法
Jun 13 Golang
详解Go语言Slice作为函数参数的使用
Jul 02 Golang
victoriaMetrics库布隆过滤器初始化及使用详解
Apr 05 Golang
Go语言grpc和protobuf
Apr 13 Golang
golang语言指针操作
Apr 14 Golang
深入理解 Golang 的字符串
May 04 Golang
Go调用Rust方法及外部函数接口前置
Jun 14 Golang
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
Jun 14 Golang
golang生成并解析JSON
Apr 14 #Golang
Go语言 详解net的tcp服务
Apr 14 #Golang
golang连接MySQl使用sqlx库
Apr 14 #Golang
Go语言安装并操作redis的go-redis库
Apr 14 #Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 #Golang
Go语言grpc和protobuf
Golang流模式之grpc的四种数据流
Apr 13 #Golang
You might like
php高级编程-函数-郑阿奇
2011/07/04 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
javascript 对象的定义方法
2007/01/10 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
python遍历小写英文字母的方法
2019/01/02 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
Python内置类型性能分析过程实例
2020/01/29 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
EJB的角色和三个对象
2015/12/31 面试题
简单叙述一下MYSQL的优化
2016/05/09 面试题
仓库管理计划书
2014/05/04 职场文书
售后客服个人自我评价
2014/09/14 职场文书
十八大标语口号
2014/10/09 职场文书
合作意向协议书
2015/01/29 职场文书
泰山导游词
2015/02/02 职场文书
2016年寒假见闻
2015/10/10 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL