(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
}
相关推荐
小镇敲码人几秒前
探索华为CANN框架中的ACL仓库
c++·python·华为·acl·cann
KIKIiiiiiiii几秒前
微信个人号API二次开发中的解决经验
java·人工智能·python·微信
梵刹古音1 分钟前
【C语言】 指针基础与定义
c语言·开发语言·算法
80530单词突击赢1 分钟前
SpringBoot整合SpringMVC全解析
java·spring boot·后端
vx1_Biye_Design11 分钟前
基于Spring Boot+Vue的学生管理系统设计与实现-计算机毕业设计源码46223
java·vue.js·spring boot·spring·eclipse·tomcat·maven
vx_Biye_Design12 分钟前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
啊阿狸不会拉杆19 分钟前
《机器学习导论》第 5 章-多元方法
人工智能·python·算法·机器学习·numpy·matplotlib·多元方法
hay_lee31 分钟前
Spring AI实现对话聊天-流式输出
java·人工智能·ollama·spring ai
liu****34 分钟前
2.深入浅出理解虚拟化与容器化(含Docker实操全解析)
运维·c++·docker·容器·虚拟化技术
Hx_Ma1637 分钟前
SpringBoot数据源自动管理
java·spring boot·spring