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)

相关推荐
小白程序员成长日记4 分钟前
2025.12.01 力扣每日一题
算法·leetcode·职场和发展
爱装代码的小瓶子4 分钟前
【cpp知识铺子】map和set的前身-二叉搜索树
c++·算法
季禮祥17 分钟前
彻底弄懂KeepAlive
javascript·vue.js·面试
TL滕37 分钟前
从0开始学算法——第四天(练点题吧)
数据结构·笔记·学习·算法
[J] 一坚38 分钟前
华为OD、微软、Google、神州数码、腾讯、中兴、网易有道C/C++字符串、数组、链表、树等笔试真题精粹
c语言·数据结构·c++·算法·链表
多则惑少则明41 分钟前
【算法题4】找出字符串中的最长回文子串(Java版)
java·开发语言·数据结构·算法
迷途之人不知返1 小时前
二叉树题目
数据结构·算法
优宁维生物2 小时前
DNA 提取的基础方法
人工智能·算法
@Aurora.2 小时前
优选算法【专题二:滑动窗口】
算法
小石头 100862 小时前
【Java】String类(超级详细!!!)
java·开发语言·算法