面试经典150题 删除有序数组中的重复项 II

面试经典150题 day4

题目来源

力扣每日一题;题序:80

我的题解

方法一 双指针

left和right分别指向相同元素的左右边界,count记录重复元素的个数,index记录最终数组的长度。

当元素没有重复时,只需要将nums[index]=nums[left];

当元素重复时,需要两次nums[index++]=nums[left++];
时间复杂度 :O(n)
空间复杂度:O(1)

java 复制代码
public int removeDuplicates(int[] nums) {
    int left=0,right=1,n=nums.length;
    int count=1;
    int index=0;
    while(right<n){
        while(right<n&&nums[left]==nums[right]){
            count++;
            right++;
        }
        if(count==1){
            nums[index++]=nums[left++];
        }else{
            nums[index++]=nums[left++];
            nums[index++]=nums[left++];
        }
        left=right;
        right++;
        count=1;
    }
    if(left<n)
        nums[index++]=nums[left++];
    return index;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐
bobz9652 小时前
进程面向资源分配,线程面向 cpu 调度
面试
绝无仅有2 小时前
数据库MySQL 面试之死锁与排查经验总结
后端·面试·github
Lotzinfly3 小时前
12个TypeScript奇淫技巧你需要掌握😏😏😏
前端·javascript·面试
绝无仅有3 小时前
mysql性能优化实战与总结
后端·面试·github
道可到3 小时前
Java 反射现代实践速查表(JDK 11+/17+)
java
Fanxt_Ja3 小时前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下3 小时前
最终的信号类
开发语言·c++·算法
道可到3 小时前
Java 反射现代实践指南(JDK 11+ / 17+ 适用)
java
ByteBlossom3 小时前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试
茉莉玫瑰花茶3 小时前
算法 --- 字符串
算法