删除排序数组中的重复项

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {print(nums[i]);
}
示例 1:输入:nums = [1,1,2]
输出:2, nums = [1,2]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
示例 2:输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
提示:0 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums 已按升序排列

因为数组是排序的,只要是相同的肯定是挨着的,我们只需要遍历所有数组,然后前后两两比较,如果有相同的就把后面的给删除。

1,双指针解决
使用两个指针,右指针始终往右移动,
如果右指针指向的值等于左指针指向的值,左指针不动。
如果右指针指向的值不等于左指针指向的值,那么左指针往右移一步,然后再把右指针指向的值赋给左指针。

    //双指针解决public int removeDuplicates(int[] A) {//边界条件判断if (A == null || A.length == 0)return 0;int left = 0;for (int right = 1; right < A.length; right++)//如果左指针和右指针指向的值一样,说明有重复的,//这个时候,左指针不动,右指针继续往右移。如果他俩//指向的值不一样就把右指针指向的值往前挪if (A[left] != A[right])A[++left] = A[right];return ++left;}
    public int removeDuplicates(int[] A) {int count = 0;//重复的数字个数for (int right = 1; right < A.length; right++) {if (A[right] == A[right - 1]) {//如果有重复的,count要加1count++;} else {//如果没有重复,后面的就往前挪A[right - count] = A[right];}}//数组的长度减去重复的个数return A.length - count;}

每天和琦琦学点新知识_算法相关推荐

  1. 每天和琦琦学点新知识_爬虫篇001

    网络爬虫相关技术 ​ 网络爬虫是一个客户端技术,不能离开服务端独立工作,而服务器端由众多的分布在互联网的web服务器组成, 在这样的环境下,爬虫要从不同的配置,不同web管件的服务器上采集页面信息,就 ...

  2. 每天和琦琦学点新知识_大数据_数仓分析

    数仓分析 ShopXO免费开源商城系统.国内领先企业级B2C免费开源电商系统,包含PC.h5.微信小程序.支付宝小程序.百度小程序.头条&抖音小程序.QQ小程序.APP.多商户,遵循MIT开源 ...

  3. 每天和琦琦学点新知识_爬虫篇002_Python正则表达式

    正则表达式 1.简介 ​ 正则表达式是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合组成一个"规则",检查一个字符串是否与这种规则匹配来实现对字符的过滤或匹配. 正 ...

  4. JavaEclipse中从Lambada表达式运行错误的解决方法到学到新知识

    package lambda; interface Animal{void shout(); } public class Lambda1 {public static void main(Strin ...

  5. python需要学哪些基础知识_零基础学Python应该学习哪些入门知识

    最近python很火,请问小白应该怎么入门呢. 大致总结了这些方面,咱们直奔主题吧. 1.Python入门导学 Python的特性.优点.缺点.前景以及python能做些什么? 2.Python环境安 ...

  6. 每天学一点新知识|提高自己的技能 爬取QQ音乐

    功能介绍:可以下载QQ音乐免费音乐和绿钻音乐,但是不能下载付费音乐.                   运行程序后会在同级目录自动创建名为:歌曲下载的文件夹,下载的文件将被放置在此文件夹       ...

  7. 几个PPT字体排版技巧,点进来就能学到新知识

    字体的排版主要针对主次关系,突出内容的权重比例,让观众能够专注于重点内容,提升排版的美观度.所以,跟大家分享一下PPT中常用的3种字体布局,让页面靠它瞬间进阶! 1.修饰 当页面涉及到文本的交错排版时 ...

  8. 【每天学习一点新知识】菜刀、冰蝎、蚁剑、哥斯拉webshell工具分析

    什么是webshell已经在之前的文章里做过讲解了,这里就不再赘述 附上链接:[每天学一点新知识]getshell???webshell???_RexHarrr的博客-CSDN博客 目录 中国菜刀 菜 ...

  9. 如何把学到的知识系统化?思维导图帮你知识管理

    关于知识系统化(或者知识管理),我们先达成两个基本共识: 1)它不是简单的干货收藏,而是一种知识内化,是将外生的变成自己的: 2)它也不是静止的状态,而是一个持续的.动态的更新过程. 基于这两个共识, ...

最新文章

  1. linux awk语法格式,Awk是什么?一文带运维小白快速掌握Linux Awk用法
  2. 国内研究生不小心跟了一个水货导师是什么样的体验?
  3. 【ML】 李宏毅机器学习一:error
  4. android 开发卫星菜单,android之类似卫星菜单,来自定义ViewGroup。。。。。
  5. 数据结构 平衡二叉树avl c++
  6. Linux安装caffe问题汇总
  7. php 数据分流,php实现请求分流 - osc_6fvwlc7h的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. Pr 视频效果:风格化
  9. 关于计算机应用技术的创业策划书,计算机创业项目计划书.docx
  10. 中国贻贝养殖种类、养殖面积、养殖产量和进出口量分析「图」
  11. 知乎周刊之程序人生概要
  12. 英文简历模板计算机专业,计算机专业英文简历模板制作
  13. HTTP Security Header Not Detected
  14. python 声音指纹识别,Python-samp中的Dejavu音频指纹识别
  15. 微生物组-扩增子16S分析第10期(报名直播课免费参加线下2020.10)
  16. 解读混淆矩阵在语义分割FCN指标计算中的应用(含代码实现)
  17. Java自定义注解-请求限流/防刷
  18. Diem(原Libra)学习笔记
  19. 如何避免动态字体Font Texture过大
  20. java计算机毕业设计临港新片区招商引资项目管理系统源代码+数据库+系统+lw文档

热门文章

  1. 美国发布未来30年20项科技趋势报告!
  2. [共享]iOS开发系列--Swift语言
  3. Ucloud大数据面试题(二面凉凉)
  4. 【实战】Serv-U MDTM Time Zone Exploit
  5. Linux下常见的压缩包格式有5种:zip tar.gz tar.bz2 tar.xz tar.Z
  6. 网易游戏2021暑期实习生 游戏运营管理面经 已拿offer
  7. 当听到一个啰里吧嗦、不着边际的极品需求之时
  8. 服务器客户端配置数据与protobuf数据转换流程操作
  9. 反激变换器的公式推导
  10. 如何快速看懂一个项目