欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode26java实现删除排序数组中的重复项

程序员文章站 2022-04-15 14:18:12
...

题目描述:
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例:
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。

解题思路:
类似于双指针法。
数组完成排序后,我们可以放置两个指针preIndex和i,preIndex指向的是删除后最近安放元素的最后位置,i负责扫描未检查元素,
若i指向的值和preIndex指向的值相同,则继续扫描,preIndex指向不变;
若i指向的值和preIndex指向的值不同,则i当前指向的值保存到preIndex的下一个位置且preIndex+1;
如此继续扫描直到结束,返回的preIndex + 1的值即为数组新的长度。

java代码如下:

class Solution {
    public int removeDuplicates(int[] nums) {
        int count;
        int preIndex = 0;
        int curValue;
        for (int i = 1; i < nums.length; i++) {
            curValue = nums[i];
            if(curValue != nums[preIndex]){
                nums[preIndex + 1] = curValue;
                preIndex = preIndex + 1;
                continue;
            }
            continue;

        }
        return preIndex + 1;
    }
}

运行结果如下:
LeetCode26java实现删除排序数组中的重复项

相关标签: leetcode