day5.12 leetcode80 删除有序数组重复项

删除有序数组重复项

给你一个有序数组 nums ,请你** 原地** 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

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

这是一道典型的双指针题,一个指针count指向结果数组的下一个位置,也就是存放满足结果数组条件的下一个元素位置,另一个指针i在后面去找符合结果的元素.

因为满足结果数组存放的条件是不超过两个相同数字,所以我们一开始在结果数组中存放两个元素(这两个元素肯定符合要求),然后我们开始用指针i在外面去寻找符合条件的元素,符合条件的要求就是不等于指针count-2指向的位置,因为不能超过3个相同元素.

如果找到了符合条件的元素,那我们就先将这个元素放进我们刚刚准备的count位置,然后扩容一位结果数组,即count++.如果没有找到,那count不动,后面那个指针自己接着向后遍历即可.

代码如下:

class Solution {
    public int removeDuplicates(int[] nums) {
        int count = 2;
        for (int i = 2; i < nums.length; i++) {
            if(nums[i] != nums[count-2]){
                nums[count] = nums[i];
                count++;
            }
        }
        return count;
    }
}
推广到保留n个相同元素

也是一样的思路,前n个元素不用判断,结果数组指针指向n+1的位置,然后后指针去找就行.

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-13 13:20:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-13 13:20:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-13 13:20:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-13 13:20:04       20 阅读

热门阅读

  1. Leetcode 3148. Maximum Difference Score in a Grid

    2024-05-13 13:20:04       13 阅读
  2. 即将研究生入学,记录一些遇到的疑问

    2024-05-13 13:20:04       10 阅读
  3. linux的Wget命令下载文件示例

    2024-05-13 13:20:04       13 阅读
  4. 如何在Python中自定义异常?

    2024-05-13 13:20:04       9 阅读
  5. JVM调优:JVM常用调优命令和参数

    2024-05-13 13:20:04       11 阅读
  6. LeetCode hot100-33-Y

    2024-05-13 13:20:04       11 阅读
  7. jdk安装使用(Linux)

    2024-05-13 13:20:04       7 阅读
  8. NIUKE SQL:进阶挑战 (上)

    2024-05-13 13:20:04       9 阅读
  9. 开发中遇到SQL IN传入参数的个数超过2100的bug

    2024-05-13 13:20:04       10 阅读