LeetCode 面试经典150题 80.删除有序数组中的重复项II

题目

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

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

思路

代码

java 复制代码
class Solution {
    public int removeDuplicates(int[] nums) {
        int k = 2; // 保留位数
        int j = k - 1;  // 始终指向结果数组的最后一个位置
        for (int i = k; i < nums.length; i++) {
            // 注意和谁比较   j-k+1
            if (nums[j - k + 1] != nums[i]) {
                nums[++j] = nums[i];
            }
        }
        return j + 1;
    }
}

性能:时间复杂度 O(n) 空间复杂度O(1)

相关推荐
programmergo28 分钟前
CMS、G1、ZGC
java·jvm·算法
nihui12333 分钟前
Java面试篇基础部分-Java序列化
java·开发语言·面试
爱棋笑谦34 分钟前
e冒泡排序---复杂度O(X^2)
java·算法·排序算法
凭君语未可1 小时前
详解贪心算法
算法·贪心算法
NeVeRMoRE_20241 小时前
【数据结构和算法实践-树-LeetCode110-平衡二叉树】
数据结构·b树·算法·leetcode
夜清寒风1 小时前
opencv学习:calcHist 函数绘制图像直方图及代码实现
人工智能·opencv·学习·算法·计算机视觉
Miss Stone1 小时前
对数器验证小和算法是否正确
算法
闲人编程1 小时前
Python实现优化的分水岭算法
python·算法·计算机视觉·优化·分水岭
一只邪恶大泡2 小时前
力扣14.最长公共前缀
数据结构·算法·leetcode