原地移除数组重复元素问题总结


注:本文章中的总结和源代码均来自labuladong的算法秘籍,写下此文的目的仅是为了自己复习所用。版权归原作者所有。如有侵权,请联系删除。


类型一:有序数组/链表去重

思路:快慢指针

首先声明两个指针:
int slow = 0 , fast = 0;
让fast指针一直在前面移动,当碰到不等于slow值的时候,进入if语句,
让slow++,然后nums[ slow ] = nums[ fast ]

上述思路执行完之后,slow指针就指向了当前去重后的数组的最后一个元素。
所以如果要返回元素的个数,就return slow + 1;

对于链表,基本思路完全一样,只是变成链表操作。


类型二:移除元素

思路:

代码思路和类型一是完全相同的,只不过处理方法有些不同。
在本题中,没说这个数组是有序的,因此在处理的时候也不需要考虑这个。
遇到不等于val的,也就是需要留下的,就放在前面,
nums[slow] = nums[fast];
slow++;
即可。
最大的区别就是这两行代码的顺序,并且最后返回的值也直接是slow

class Solution {public int removeElement(int[] nums, int val) {if(nums.length == 0) return 0;int slow = 0 , fast = 0;// Arrays.sort(nums);while(fast < nums.length) {if(nums[fast] != val) { // 把不等于val的数值筛选出来,放在最前面// 注意 这里是先赋值 再把slow++ 和之前的数组去重不太一样nums[slow] = nums[fast];slow++;}fast++;}return slow;}
}

类型三:移动元素

思路:

类型二是删除val值的元素,这里是移动val值元素。
区别就是,对于类型二,后面的元素可以不管了
但是对于类型三,必须要把后面的元素重新赋值。
如果是移动0元素,就直接把后面的全部赋值0即可。
先调用移除元素的方法,得到slow值,即length
然后用while循环赋值即可

class Solution {public void moveZeroes(int[] nums) {int len = removeElement(nums,0); // len是0之外的元素的个数while(len < nums.length) {nums[len] =0;len++;}}// 移除val值的元素 public int removeElement(int[] nums, int val) {if(nums.length == 0) return 0;int slow = 0 , fast = 0;// Arrays.sort(nums);while(fast < nums.length) {if(nums[fast] != val) { // 把不等于val的数值筛选出来,放在最前面// 注意 这里是先赋值 再把slow++ 和之前的数组去重不太一样nums[slow] = nums[fast];slow++;}fast++;}return slow;}
}

原地移除数组重复元素问题总结相关推荐

  1. 前端面试高频题:删除数组重复元素的多种方法

    最近在想着换工作,去了一家中关村的上市公司,面试官随便问了几个问题其中就提到了怎么删除数组元素的方法,表示这已经是第三次遇到了这个问题了,由于知识口头说说所以就随便说了下,之前用的时候都是直接找的方法 ...

  2. php array_flip() 删除数组重复元素——大彻大悟

    1. php array_flip() 删除数组重复元素,如果用于一维索引数组,好理解. [root@BG-DB:~]$more arr.php  <?php $arr = array('a', ...

  3. LeetCode-数组-删除有序数组重复元素

    题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. ...

  4. Java查找数组重复元素,并打印重复元素、重复次数、重复元素位置

    面试题查找重复元素并打印重复次数和重复位置,一顿懵逼,回来死磕写下来,打印指定重复次数和最大次数,其他在此基础上可以再更新 package sort; import org.testng.annota ...

  5. java去除数组重复元素的四种方法

    [java]  view plain copy print ? package com.yzycool.test; import java.util.ArrayList; import java.ut ...

  6. java:去除数组重复元素的四种方法

    方法1: 需要一个存储去重后元素的数组,然后两层循环,外层遍历原数组,内容逐个判断是否和之后的元素重复,然后再提出来存入新的数组.方法System.arraycopy(被复制的数组,起始下标,接收的新 ...

  7. jq 数组不重复_JS Jquery去除数组重复元素

    jQuery的数组处理,便捷,功能齐全. 最近的项目中用到的比较多,深感实用,一步到位的封装了很多原生js数组不能企及的功能. 最近时间紧迫,今天抽了些时间回过头来看 jQuery中文文档 中对数组的 ...

  8. 异或运算符^,筛选出数组重复元素

    利用异或的:0异或任何树都得任何书,相同的数字异或得到0; 这里的例题是在长度为10的数组中,里面有1-9的顺序数字,但是有一个数字是重复的,请找出来 我们首先创建这样的一个数组 int N=10;i ...

  9. JavaScript移除数组指定元素,操作原数组

    移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回. var arr=[1,2,3,3,12,3,2,5]; var item = 3; cons ...

最新文章

  1. 不想被问年终奖?2018年春节自救攻略来了!
  2. [轉載]用PHP的ob_start();控制您的浏览器cache!
  3. 零窗口探测怎么抓包_Linux服务器下的HTTP抓包分析
  4. python get score gain_Python functional.linear方法代码示例
  5. 【bzoj3530】[Sdoi2014]数数 AC自动机+数位dp
  6. Teamcenter 入门开发系列问答(4)
  7. 20211028:DC综合时的内部时钟处理
  8. [Xcode 实际操作]八、网络与多线程-(17)使用网址会话对象URLSession向远程服务器上传图片...
  9. 【Oracle】DBA_AUDIT_TRAIL表SES_ACTIONS字段对应的操作列表
  10. 【SimpleITK】胸部CT数据3D space归一化,以及3D plot
  11. 高分一号(GF-1)影像数据下载方法
  12. 微信小程序海报画布生成圆形头像
  13. 学计算机游戏与动漫好吗,学习计算机动漫与游戏制作前途如何?
  14. mysql 中auto_mysql中的auto_increment
  15. 论文超详细精读|五千字:STGR
  16. 入行大数据,需要学习哪些基础知识?
  17. 端口号,UDP,TCP
  18. struts、hibernate、spring这三个框架和J2EE是什么关系
  19. java屏蔽虚拟按键代码_Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP)/动态显示和隐藏NavigationBar...
  20. 你所不知道的良心网站第一弹

热门文章

  1. HTML.网页程序设计
  2. dos脚本批量更改照片命名(文字变更数字)
  3. 国内安装oh-my-zsh
  4. arm linux not syncing,Linux系统启动中途停止,提示Kernel panic - not syncing: Attempted to kill init!...
  5. ArcGIS如何创建渔网?渔网不见了。
  6. Hutool工具生成二维码
  7. 学习ELMo从文本中提取特征的分步NLP指南
  8. Linux 存储 Stack详解
  9. 统计学简介之十六——单因素方差分析
  10. BC20/BC26-opencpu移植cjson,mqtt等注意事项