面试经典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;
}

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

相关推荐
007php0072 分钟前
redis缓存功能结合实际项目面试之问题与解析
网络·redis·nginx·缓存·面试·职场和发展·php
leing1234 分钟前
14. 最长公共前缀-leetcode
linux·服务器·leetcode
梓德原5 分钟前
【C语言】C语言如何向系统接要存
java·c语言·算法
WX-bisheyuange8 分钟前
基于Spring Boot的流浪动物管理系统
java·spring boot·后端
阿蔹9 分钟前
Selenium---控制窗口、manage()方法
java·selenium·测试工具·面试
却话巴山夜雨时i10 分钟前
84. 柱状图中最大的矩形【困难】
算法
学困昇12 分钟前
Linux基础开发工具(上):从包管理到“进度条”项目实战,掌握 yum/vim/gcc 核心工具
linux·运维·开发语言·数据结构·c++·vim
浅川.2514 分钟前
xtuoj Interprime
算法
兩尛14 分钟前
HJ52 计算字符串的编辑距离
java·开发语言·算法
cici1587415 分钟前
基于LCMV的自适应波束形成算法仿真实现
算法