原地移除数组重复元素问题总结
原地移除数组重复元素问题总结
注:本文章中的总结和源代码均来自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;}
}
原地移除数组重复元素问题总结相关推荐
- 前端面试高频题:删除数组重复元素的多种方法
最近在想着换工作,去了一家中关村的上市公司,面试官随便问了几个问题其中就提到了怎么删除数组元素的方法,表示这已经是第三次遇到了这个问题了,由于知识口头说说所以就随便说了下,之前用的时候都是直接找的方法 ...
- php array_flip() 删除数组重复元素——大彻大悟
1. php array_flip() 删除数组重复元素,如果用于一维索引数组,好理解. [root@BG-DB:~]$more arr.php <?php $arr = array('a', ...
- LeetCode-数组-删除有序数组重复元素
题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. ...
- Java查找数组重复元素,并打印重复元素、重复次数、重复元素位置
面试题查找重复元素并打印重复次数和重复位置,一顿懵逼,回来死磕写下来,打印指定重复次数和最大次数,其他在此基础上可以再更新 package sort; import org.testng.annota ...
- java去除数组重复元素的四种方法
[java] view plain copy print ? package com.yzycool.test; import java.util.ArrayList; import java.ut ...
- java:去除数组重复元素的四种方法
方法1: 需要一个存储去重后元素的数组,然后两层循环,外层遍历原数组,内容逐个判断是否和之后的元素重复,然后再提出来存入新的数组.方法System.arraycopy(被复制的数组,起始下标,接收的新 ...
- jq 数组不重复_JS Jquery去除数组重复元素
jQuery的数组处理,便捷,功能齐全. 最近的项目中用到的比较多,深感实用,一步到位的封装了很多原生js数组不能企及的功能. 最近时间紧迫,今天抽了些时间回过头来看 jQuery中文文档 中对数组的 ...
- 异或运算符^,筛选出数组重复元素
利用异或的:0异或任何树都得任何书,相同的数字异或得到0; 这里的例题是在长度为10的数组中,里面有1-9的顺序数字,但是有一个数字是重复的,请找出来 我们首先创建这样的一个数组 int N=10;i ...
- JavaScript移除数组指定元素,操作原数组
移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回. var arr=[1,2,3,3,12,3,2,5]; var item = 3; cons ...
最新文章
- 不想被问年终奖?2018年春节自救攻略来了!
- [轉載]用PHP的ob_start();控制您的浏览器cache!
- 零窗口探测怎么抓包_Linux服务器下的HTTP抓包分析
- python get score gain_Python functional.linear方法代码示例
- 【bzoj3530】[Sdoi2014]数数 AC自动机+数位dp
- Teamcenter 入门开发系列问答(4)
- 20211028:DC综合时的内部时钟处理
- [Xcode 实际操作]八、网络与多线程-(17)使用网址会话对象URLSession向远程服务器上传图片...
- 【Oracle】DBA_AUDIT_TRAIL表SES_ACTIONS字段对应的操作列表
- 【SimpleITK】胸部CT数据3D space归一化,以及3D plot
- 高分一号(GF-1)影像数据下载方法
- 微信小程序海报画布生成圆形头像
- 学计算机游戏与动漫好吗,学习计算机动漫与游戏制作前途如何?
- mysql 中auto_mysql中的auto_increment
- 论文超详细精读|五千字:STGR
- 入行大数据,需要学习哪些基础知识?
- 端口号,UDP,TCP
- struts、hibernate、spring这三个框架和J2EE是什么关系
- java屏蔽虚拟按键代码_Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP)/动态显示和隐藏NavigationBar...
- 你所不知道的良心网站第一弹
热门文章
- HTML.网页程序设计
- dos脚本批量更改照片命名(文字变更数字)
- 国内安装oh-my-zsh
- arm linux not syncing,Linux系统启动中途停止,提示Kernel panic - not syncing: Attempted to kill init!...
- ArcGIS如何创建渔网?渔网不见了。
- Hutool工具生成二维码
- 学习ELMo从文本中提取特征的分步NLP指南
- Linux 存储 Stack详解
- 统计学简介之十六——单因素方差分析
- BC20/BC26-opencpu移植cjson,mqtt等注意事项