【算法】删除数组中的重复元素 - 双指针

2024-04-03  本文已影响0人  王月亮17

题目

给定一个有序数组,要求删除数组中的重复元素,不允许创建新数组,返回删除重复元素后的数组长度。

原理

定义一个快指针 j 和一个慢指针 i,慢指针从下标0开始,快指针从下标1开始,遍历数组。如果两个下标对应的数不相等, 则后移 i,并将j的元素赋值到 i,然后后移 j。如果相等,则只后移 j。
这样等 j 遍历完数组后,不重复的元素正好排到 i 的位置。由于题目要求返回长度,所以返回 i+1 即可。

代码

    public static void main(String[] args) {
        int[] arr = new int[]{0, 1, 2, 2, 3, 3, 4};
        int result = duplicateDrop(arr);
        System.out.println(result);
    }

    private static int duplicateDrop(int[] arr) {
        if (arr.length <= 1) {
            return arr.length;
        }
        int i = 0;
        for (int j = 1; j < arr.length; j++) {
            if (arr[j] != arr[i]) {
                i++;
                arr[i] = arr[j];
            }
        }
        return i + 1;
    }
上一篇 下一篇

猜你喜欢

热点阅读