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)

相关推荐
京东零售技术10 分钟前
在京东 探索技术的无限可能
面试
suuijbd1 小时前
个人总结八股文之-基础篇(持续更新)
算法
2401_881244401 小时前
斐波那契数列------矩阵幂法
线性代数·算法·矩阵
机器学习与统计学1 小时前
阿里牛逼,又开源两个遥遥领先的模型(向量化、重排),知识库要翻天地覆了
算法
寒山李白1 小时前
Java 依赖注入、控制反转与面向切面:面试深度解析
java·开发语言·面试·依赖注入·控制反转·面向切面
小河豚oO1 小时前
LeetCode刷题---贪心算法---944
算法·leetcode·贪心算法
ZzMemory1 小时前
藏起来的JS(四) - GC(垃圾回收机制)
前端·javascript·面试
【杨(_> <_)】1 小时前
信号处理分析工具——时频分析(一)
算法·matlab·信号处理
还不起来学习?1 小时前
常见算法题目5 -常见的排序算法
java·算法·排序算法
Once_day2 小时前
代码训练LeetCode(23)随机访问元素
算法·leetcode