删除排序数组中的重复项
leetcode第26题(简单)
原链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
问题描述
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定数组 nums = [1,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
。
你不需要考虑数组中超出新长度后面的元素。
解题思路
两个指针,第一个指针index
指向修改后不重复数组最后一个元素,第二个指针j
去遍历一遍整个数组,如果遍历过程中满足nums[i]!=nums[index]
并且第二个指针j
的位置在第一个指针index
之前,就可以交换这两个元素,同时 index++
。直到数组被遍历完,算法结束,返回index+1
,因为要求返回元素个数,index
是从0
开始的。
代码(java)
class Solution {
public int removeDuplicates(int[] nums) {
int index=0,j=nums.length;
for(int i=1;i<j;i++){
if(nums[i]!=nums[index]){
if(i>index+1){
nums[index+1]=nums[i];
}
index++;
}
}
return index+1;
}
}
猜你喜欢
blog
查询表中某个字段重复的数据
数据库基础
2898
查询表中某个字段重复的数据select*fromuserstwhere(selectcount(1)fromuserswhereusername=t.username)1例如:查询所有用户名重复的数
ofc
删除链表中的节点
official
1034
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为要被删除的节点。现有一个链表--head=[4,5,1,9],它可以表示为:示例1:输入:head=[4,5,1,9],n
其他
3281
在.NET程序中,因为运行中的程序是受系统保护的,不能自己删除自身的,所以自删除的思路是:在关闭本程序之前启动新的进程打开另一个程序,调用这个程序来删除原程序。然后再完成外部进程的销毁。代码如下
前端(h5)
2903
定义和用法splice()方法向/从数组中添加/删除项目,然后返回被删除的项目。注意:该方法会改变原始数组。语法arrayObject.splice(index,howmany,item1
blog
归并排序(递归)- 数据结构与算法
数据结构与算法
1514
算法思想该算法使用递归法实现,思路为:每次递归将待排序数组在中间位置分成左右两组,分别对左右两个数组进行归并排序,递归的条件是数组长度必须大于等于3,所以当数组中只有两个数据的时候可以直接进行比较排
blog
十种排序算法理解(前五)
数据结构与算法
5453
交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序完成。代码packages
blog
希尔排序 - 数据结构与算法
数据结构与算法
1526
算法思想:希尔排序是插入排序的增强版,其主要的算法思想还是插入排序的思想。算法描述:在插入排序的基础上,对待排序数组进行间隔为inc的分组,然后对每个分组进行直接插入排序,一次排序完成后,减小inc
blog
选择排序 - 数据结构和算法
数据结构与算法
1488
算法思想:对冒泡排序的一种改进,每次从没有排序的集合a中拿取一个最大或最小的元素,放入有序的集合b中,直到a集合中的元素被取完算法描述:用变量i遍历整个数组,用变量j遍历i后面的数组,每次遍历i初始
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。