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

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



思路:左指针 left 类似于指向栈顶的下一个待填的元素,每次遍历只需看当前元素nums[i]和栈顶的下一个元素nums[left-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
}
相关推荐
FQNmxDG4S8 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
超级码力6668 小时前
【Latex文件架构】Latex文件架构模板
算法·数学建模·信息可视化
穿条秋裤到处跑8 小时前
每日一道leetcode(2026.04.29):二维网格图中探测环
算法·leetcode·职场和发展
Merlos_wind8 小时前
HashMap详解
算法·哈希算法·散列表
虹科网络安全9 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje9 小时前
Java语法进阶
java·开发语言·jvm
汉克老师9 小时前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
rKWP8gKv79 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫9 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287929 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日