【LeetCode】80.删除有序数组中的重复项II

题目链接:

80.删除有序数组中的重复项II

题目描述:

解题思路:

按照题目中要求,必须在原来数组中进行修改,并且在O(1)额外空间条件下完成。因此我们可以使用双指针算法,算法具体流程如下:

  • 如果数组长度 nums.size() <= 2, 则直接 return nums.size()即可
  • 定义两个指针 slowfast,并初始化为2
  • 如果 nums[slow - 2] == nums[fast],说明已经有两个数相等,因此 nums[fast] 数值不能放进结果之中。反之,如果nums[slow - 2] != nums[fast],那么nums[fast]可以放进nums[slow]中,并且slow++,记录结果的长度
  • fast>=nums.size()的时候,结束循环,返回数组长度slow

复杂度分析:

  • 时间复杂度O(n)
  • 空间复杂度O(1)

代码实现:

cpp 复制代码
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if(n<=2){
            return n;
        }
        int slow = 2;
        int fast = 2;

        while(fast<n){
            if(nums[slow-2] != nums[fast]){
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
};

进一步可以优化掉快指针fast:

cpp 复制代码
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {

        int slow = 0;
        for(int num : nums){
            if(slow<2 ||  nums[slow-2] < num){
                nums[slow] = num;
                slow++;
            }
        }

        return slow;
    }
};

解题思路参考:
https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/solutions/702869/ju-yi-fan-er-ni-zhen-de-zhen-de-zhi-de-x-eicz/?envType=study-plan-v2&envId=top-interview-150

相关推荐
hongyucai18 分钟前
torch具身常用算子
人工智能·深度学习
林泽毅29 分钟前
PyTRIO快速入门(一):概念、推理与训练
人工智能·python·深度学习·机器学习·语言模型
美团技术团队35 分钟前
让AI离开温室,走向动态世界:MineExplorer揭示顶级多模态大模型被忽视的能力断层
人工智能
Litluecat1 小时前
2026年7月23日科技热点新闻
人工智能·科技·新闻·每日·速览
美团技术团队1 小时前
下一代搜索智能体评测基准!美团开源LoHoSearch,用知识图谱校准AI能力认知
人工智能
武子康1 小时前
Token 单价更低,Agent 任务为什么反而更贵:4 层成本口径 + 最小事件账本 + 3 个决策问题
人工智能·agent·ai编程
叫我Paul就好1 小时前
RAG 入门到精通 - 构建评估系统
人工智能·rag
学术小李1 小时前
基于Pytorch,如何用CUDA自己写算子?(一)
人工智能·pytorch·python
九硕智慧建筑一体化厂家1 小时前
直流照明降损节能,智慧路灯点亮智慧城市脉络
人工智能·智慧城市
秦先生在广东1 小时前
Block Buzz:用 Nostr 协议把 AI Agent 变成真正的队友,而非自动化幽灵
人工智能