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)

相关推荐
zone77392 分钟前
004:RAG 入门-LangChain读取PDF
后端·python·面试
会员源码网8 分钟前
内存泄漏(如未关闭流、缓存无限增长)
算法
青青家的小灰灰18 分钟前
Vue 3 新标准:<script setup> 核心特性、宏命令与避坑指南
前端·vue.js·面试
Heo1 小时前
深入 React19 Diff 算法
前端·javascript·面试
颜酱1 小时前
从0到1实现LFU缓存:思路拆解+代码落地
javascript·后端·算法
流水白开2 小时前
前端设计模式
javascript·面试
茶杯梦轩2 小时前
从零起步学习RabbitMQ || 第三章:RabbitMQ的生产者、Broker、消费者如何保证消息不丢失(可靠性)详解
分布式·后端·面试
颜酱2 小时前
从0到1实现LRU缓存:思路拆解+代码落地
javascript·后端·算法
sunny_14 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js