(LeetCode 面试经典 150 题) 80. 删除有序数组中的重复项 II (双指针、栈)

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



思路:左指针 left 类似于指向栈顶的下一个待填的元素,每次遍历只需看当前元素numsi和栈顶的下一个元素numsleft-2是否相等,不等就可以插入栈当中。时间复杂度0(n)。

C++版本:

cpp 复制代码
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int left=2;
        for(int i=2;i<nums.size();i++){
            if(nums[left-2]!=nums[i]){
                nums[left]=nums[i];
                left++;
            }
        }
        if(left>nums.size()) return nums.size();
        return left;
    }
};

JAVA版本:

java 复制代码
class Solution {
    public int removeDuplicates(int[] nums) {
        int left=2;
        for(int i=2;i<nums.length;i++){
            if(nums[left-2]!=nums[i]){
                nums[left]=nums[i];
                left++;
            }
        }
        if(left>nums.length) return nums.length;
        return left;
    }
}

Go版本:

go 复制代码
func removeDuplicates(nums []int) int {
    left:=2
    for i:=2;i<len(nums);i++ {
        if nums[left-2]!=nums[i] {
            nums[left]=nums[i]
            left++
        }
    }
    if left>len(nums) {
        return len(nums)
    }
    return left
}
相关推荐
_Evan_Yao5 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
梓豪csd5 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼5 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
会编程的小孩5 小时前
C++ qt的安装
c++
thefool1122666 小时前
TCP 1
java·1024程序员节
企业数字化笔记8 小时前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
金銀銅鐵8 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
?abc!8 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
AI人工智能+电脑小能手8 小时前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务
孔令飞10 小时前
工具分享:OneX AI 工具安装、配置及功能介绍
云原生·go·ai编程