删除排序数组中的重复项

weblog 930 0 0

leetcode26题(简单)

原链接: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;
    }
}

猜你喜欢
数据库基础 2898 查询表某个字段据select*fromuserstwhere(selectcount(1)fromuserswhereusername=t.username)1例如:查询所有用户名
official 1034 请编写一个函,使其可以某个链表给定(非末尾)节点。传入函唯一参为要被节点。现有一个链表--head=[4,5,1,9],它可以表示为:示例1:输入:head=[4,5,1,9],n
其他 3281 在.NET程,因为运行是受系统保护,不能自己自身,所以自思路是:在关闭本程之前启动新进程打开另一个程,调用这个程原程。然后再完成外部进程销毁。代码如下
前端(h5) 2903 定义和用法splice()方法向/从添加/目,然后返回被目。注意:该方法会改变原始。语法arrayObject.splice(index,howmany,item1
数据结构与算法 1514 算法思想该算法使用递归法实现,思路为:每次递归将待间位置分成左右两,分别对左右两个进行归并,递归条件是长度必须大于等于3,所以当只有两个时候可以直接进行比较
数据结构与算法 5453 交换它们两个;对每一对相邻元素作同样工作,从开始第一对到结尾最后一对,这样在最后元素应该会是最大;针对所有元素以上步骤,了最后一个;步骤1~3,直到完成。代码packages
数据结构与算法 1526 算法思想:希尔是插入增强版,其主要算法思想还是插入思想。算法描述:在插入基础上,对待进行间隔为inc,然后对每个分进行直接插入,一次完成后,减小inc
数据结构与算法 1488 算法思想:对冒泡一种改进,每次从没有集合a拿取一个最大或最小元素,放入有集合b,直到a集合元素被取完算法描述:用变量i遍历整个,用变量j遍历i后面,每次遍历i初始
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。