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)

相关推荐
非著名架构师36 分钟前
极端天气下的供应链韧性:制造企业如何构建气象风险防御体系
大数据·人工智能·算法·制造·疾风气象大模型·风光功率预测
星轨初途44 分钟前
数据结构排序算法详解(2)——选择排序(附动图)
c语言·数据结构·经验分享·笔记·b树·算法·排序算法
艾斯比的日常1 小时前
JVM 内存结构:全面解析与面试重点
jvm·面试·职场和发展
gadiaola1 小时前
【计算机网络面试篇】HTTP
java·后端·网络协议·计算机网络·http·面试
鹏北海2 小时前
多标签页登录状态同步:一个简单而有效的解决方案
前端·面试·架构
kaikaile19952 小时前
基于 MATLAB 的室内三维定位
算法
AGI前沿2 小时前
AdamW的继任者?AdamHD让LLM训练提速15%,性能提升4.7%,显存再省30%
人工智能·算法·语言模型·aigc
Tan_Ying_Y2 小时前
什么是垃圾回收算法 他的底层原理是什么?
算法
Xの哲學2 小时前
Linux 分区表深度技术剖析
linux·网络·算法·架构·边缘计算
写写闲篇儿2 小时前
经典算法题剖析之传递信息(三)
算法