LeetCode 26. 删除有序数组中的重复项(数组)

200 阅读1分钟

难度:简单

题目

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

第一次提交

362 / 362 个通过测试用例
状态:通过
执行用时: 1 ms
内存消耗: 39.9 MB

    public int removeDuplicates(int[] nums) {
        int flag = 1;
        int i = 0;;
        for(i = 1; i < nums.length; i++){
            if(nums[i]!=nums[i-1]){
                nums[flag++] = nums[i];
            }
            if(nums[i]==nums[nums.length-1]) break;
        }
        return flag;
    }
}

思路

双指针(flag,i),flag 和 i 从1开始,flag 当做要被填的位置,遍历数组,比较 nums[i] 和 nums[i-1],如果不相同就把 nums[i] 赋值给 nums[flag] ,然后 flag 向后移动一个,如果相同则将 i 往后移动一位继续比较。
其中包含了相同元素的赋值操作,不过两个指针指在同一个位置时的赋值是不消耗资源的。

试了几个不同写法,目前这个是最优的,如果有更好的写法欢迎评论区讨论!!!

第一次写,没有经验,以后会不断学习改进!!!