(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
}
相关推荐
点云SLAM11 分钟前
PyTorch 中.backward() 详解使用
人工智能·pytorch·python·深度学习·算法·机器学习·机器人
only-qi40 分钟前
146. LRU 缓存
java·算法·缓存
xuxie132 小时前
SpringBoot文件下载(多文件以zip形式,单文件格式不变)
java·spring boot·后端
重生成为编程大王2 小时前
Java中的多态有什么用?
java·后端
梁辰兴2 小时前
数据结构:排序
数据结构·算法·排序算法·c·插入排序·排序·交换排序
Murphy_lx2 小时前
Lambda表达式
开发语言·c++
666和7772 小时前
Struts2 工作总结
java·数据库
中草药z2 小时前
【Stream API】高效简化集合处理
java·前端·javascript·stream·parallelstream·并行流
yangpipi-2 小时前
C++并发编程-23. 线程间切分任务的方法
开发语言·c++
Lris-KK2 小时前
【Leetcode】高频SQL基础题--1731.每位经理的下属员工数量
sql·leetcode