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)

相关推荐
wanderist.15 分钟前
从Nim游戏到SG函数
c++·算法·蓝桥杯
xlp666hub16 分钟前
一篇文章彻底搞懂Linux驱动的并发控制与中断上下半部机制
linux·面试
张元清19 分钟前
React 滚动效果:告别第三方库
前端·javascript·面试
莫叫石榴姐25 分钟前
本体论:企业智能化转型的核心引擎
大数据·数据仓库·人工智能·面试·职场和发展
野犬寒鸦25 分钟前
高并发利器:SingleFlight优化指南(Java版实现与项目实战)
服务器·开发语言·redis·后端·面试
kyriewen31 分钟前
事件流与事件委托:当点击按钮时,浏览器里发生了什么?
前端·javascript·面试
数据皮皮侠32 分钟前
2285 上市公司组织衰退程度【Dec】2010-2024
大数据·人工智能·算法·制造
不秃不少年32 分钟前
工厂方法模式(Factory Method)
java·面试·工厂方法模式
daxi15034 分钟前
C语言从入门到进阶——第17讲:字符串函数
c语言·开发语言·算法·蓝桥杯
AY呀35 分钟前
# 从手写 debounce 到企业级实现:我在面试中如何“降维打击”面试官
前端·面试