1. 原始题目

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

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

示例 1:

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

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

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

示例 2:

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

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

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

2. 思路

由于数组是已经排序的,所以可以利用这一条件。因为要求每个数最多重复2次。所以如果当前数据长度小于等于2,则不动,i指针往前走。如果大于2的数组,当前的元素如果比其前面的第二个数大则一定可以加入。

3. 解题

 class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
i = 0 # 后端索引
for n in nums: # 对于每个元素
if i<2 or n>nums[i-2]: # 如果元素数目<2则直接加入,如果当前元素比前面第2个元素大,则说明不重复,予以加入
nums[i] = n
i+=1
return i

4. 总结

26. Remove Duplicates from Sorted Array 是此题型的第一题:

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

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

即【1,1,2,3,5,7,7,8】返回6 ,因为【1,2,3,5,7,8】。思路仍然是一样的。什么时候当前元素可以放到前面去?如果元素长度<1肯定可以直接放。那此外如果当前元素比i指向的元素大,说明没有重复也可以直接放入!

class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
i = 0
for n in nums:
if i<1 or n>nums[i-1]:
nums[i] = n
i+=1
return i

最新文章

  1. 2019年台积电进军AR芯片,将用于下一代iPhone
  2. maven报错非法字符:\65279 错误
  3. DB2常识
  4. Callable与Future、FutureTask的学习 &amp; ExecutorServer 与 CompletionService 学习 &amp; Java异常处理-重要
  5. SGU 532. Building Foundation 暴力
  6. OpenGL第8,9讲小结
  7. TextField笔记
  8. 1.3. chromium源代码分析 - chromiumframe - 窗口系列
  9. 转: 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)
  10. 【微软大法好】VS Tools for AI全攻略(3)
  11. 【阿里聚安全&#183;安全周刊】Python库现后门 可窃取用户SSH信息|Facebook再曝300万用户数据泄露
  12. 将BUG管理工具(禅道)部署到服务器(测试服务器、云服务器)
  13. 普通用户使用Docker
  14. mysql5.6 sql_mode设置为宽松模式
  15. BZOJ 4584 luogu P3643: [Apio2016]赛艇
  16. java 线程Thread 技术--volatile关键字
  17. hdu5672 尺取
  18. Angular4学习笔记(六)- Input和Output
  19. FlinkCEP - Complex event processing for Flink
  20. Ubuntu16.04安装OpenCV3.2以及PCL1.8

热门文章

  1. 安装nginx环境(含lua)时遇到报错ngx_http_lua_common.h:20:20: error: luajit.h: No such file or directory的解决
  2. Django创建管理员账号
  3. Kotlin反射重要组件与流程详解
  4. 2019年牛客多校第一场 C题Euclidean Distance 暴力+数学
  5. 【MySQL】测试MySQL表中安全删除重复数据只保留一条的相关方法
  6. Alpha冲刺(9/10)——2019.5.2
  7. nginx和tomcat配置负载均衡和session同步
  8. Vue移动端项目如何使用手机预览调试
  9. Codechef:Fibonacci Number/FN——求通项+二次剩余+bsgs
  10. sping boot 集成shiro