博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
26.删除排序数组中的重复项
阅读量:6440 次
发布时间:2019-06-23

本文共 1650 字,大约阅读时间需要 5 分钟。

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

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

 

我的实现:(效率很低,276ms)

class Solution {public:    int removeDuplicates(vector
& nums) { int ret = nums.size(); for (int i = 0 ; i< ret - 1;) { if(nums.at(i) != nums.at(i+1)) { ++i; continue; } else { for(int j = i ; j < ret-1; ++j) { nums.at(j) = nums.at(j+1); } ret--; } } return ret; }};

 

大神实现:(16ms)

1 class Solution {2 public:3     int removeDuplicates(vector
& nums) {4 nums.erase(std::unique(nums.begin(), mums.end()), nums.end());5 return noms.size();6 }7 }

 

std::unique,

消除连续组中的除了第一个元素的其他相同的元素;

消除后的元素之间的相对位置不变;

返回新的past-the-end;

 

参考std::unique的实现了一个版本:(28ms)

class Solution {public:    int removeDuplicates(vector
& nums) { int ret = 1; vector
::iterator beginIter = nums.begin(); vector
::iterator endIter = nums.end(); if(beginIter == endIter) return 0; vector
::iterator resultIter = beginIter; while(++beginIter != endIter) { if((*beginIter != *resultIter) ) { ++resultIter; *resultIter = std::move(*beginIter); ++ret; } } ++resultIter; return ret; }};

 

 

 

转载于:https://www.cnblogs.com/jimobuwu/p/8961069.html

你可能感兴趣的文章
openstack中虚机修复模式(类似winpe)
查看>>
lvm扩展容量大小
查看>>
关于HTTPS
查看>>
suse下配置NTP(Network Time Protocol)服务
查看>>
javascript事件冒泡机制探讨
查看>>
pxe网络装机kickstart的密码生成
查看>>
安卓Fragment的切换
查看>>
请注意不一样的innodb引擎
查看>>
Python数据类型
查看>>
Oracle查询语句的优化-记录一
查看>>
spring cloud 配置中心--本地 native
查看>>
mysql备份工具mysqldump
查看>>
Python rabbitmq的使用(三)
查看>>
负载均衡实施 应该因地制宜
查看>>
win7笔记本变路由器
查看>>
一个简单的c问题
查看>>
Linux的用户和组命令之newgrp
查看>>
FaceID或者TouchID
查看>>
我的友情链接
查看>>
Java虚拟机学习 - JDK可视化监控工具
查看>>