美文网首页
每日一道算法题 - 删除排序数组中的重复项

每日一道算法题 - 删除排序数组中的重复项

作者: 辉_ace | 来源:发表于2021-12-08 23:51 被阅读0次

问题

给定一个有序数组 nums ,请你 【原地】 删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。
要求:不要使用额外的数组空间,你必须在 【原地】 修改输入数组 并在使用 【O(1)】 额外空间的条件下完成。

思路

通过自定义游标,通过遍历数组的方式,不断比较当前遍历到的数组下标值和游标值-1【两两比较】。如果两个值相等,则数组下标向后移动,游标值不动。如果两个值不相等,则将当前数组下标值覆盖当前游标对应的数组值,并游标向后移动,且记录的数组长度+1。

实现

public class RemoveDuplicates {

    public static void main(String[] args) {
        //期望结果:5
        int[] nums = new int[]{0,0,1,1,1,2,2,3,3,4};
        int result = removeDuplicates(nums);
        System.out.println(result);
    }

    //双层指针,两两比较
    private static int removeDuplicates(int[] nums) {
        int count = 1;
        //定义游标
        int index = 1;
        for (int i=1;i<nums.length;i++){
            //比较当前遍历的数组值和游标值-1, 如果相等则数组下标+1
            //第一次  数组1,0   游标1,0
            //第二次 数组2,1   游标1,0
            if (nums[i] == nums[index-1]){
                continue;
            }
            //不等于的话,则将当前数组下标赋值给当前游标值, 游标值+1
            nums[index]=nums[i];
            index++;
            count++;
        }
        return count;
    }
}

相关文章

网友评论

      本文标题:每日一道算法题 - 删除排序数组中的重复项

      本文链接:https://www.haomeiwen.com/subject/bvmxfrtx.html