(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
}
相关推荐
一条GO2 分钟前
简单的 defer 也有可能写出BUG
go
干啥啥不行,秃头第一名3 分钟前
C++与机器学习框架
开发语言·c++·算法
花月C3 分钟前
基于WebSocket的 “聊天” 业务设计与实战指南
java·网络·后端·websocket·网络协议
hongtianzai4 分钟前
Laravel7.x十大核心特性解析
java·c语言·开发语言·golang·php
爱吃涮毛肚的肥肥(暂时吃不了版)6 分钟前
Leetcode——181.超过经理收入的员工
算法·leetcode·职场和发展
醉颜凉7 分钟前
Seal^_^【送书活动第8期】——《ChatGLM3大模型本地化部署、应用开发与微调》
人工智能·职场和发展·送书活动·chatglm3大模型
永远睡不够的入7 分钟前
C++庖丁解牛:深入理解多态:从虚函数表到底层实现
开发语言·c++
Z059 分钟前
C++类和对象(中)——拷贝构造函数
c++
Charlie_lll9 分钟前
力扣解题-接雨水
算法·leetcode
计算机学姐10 分钟前
基于SpringBoot的校园二手交易系统
java·vue.js·spring boot·后端·spring·tomcat·intellij-idea