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

面试经典150题 day3

题目来源

力扣每日一题;题序:26

我的题解

方法一 双指针

使用两个指针分别指向相同元素的左右边界,再利用一个count记录最终需要的数组长度。
时间复杂度 :O(n)
空间复杂度:O(1)

java 复制代码
public int removeDuplicates(int[] nums) {
    int left=0,right=1;
    int n=nums.length;
    if(n==1)
        return n;
    int count=0;
    while(right<n){
    	//找到相同元素的左右边界
        while(right<n&&nums[left]==nums[right])
            right++;
        //当前相同元素记录如最终的数组
        count++;
        left=right;
        right++;
        //只有left小于n时才会更新结果数组
        if(left<n)
            nums[count]=nums[left];
    }
    if(left<n)
        count++;
    return count;
}

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

相关推荐
躺不平的理查德几秒前
时间复杂度与空间复杂度备忘录
数据结构·算法
yaki_ya几秒前
yaki-C语言:从概念基础到内存解析---数组(array)完全指南
java·c语言·算法
刃神太酷啦1 分钟前
扒透 STL 底层!map/set 如何封装红黑树?迭代器逻辑 + 键值限制全手撕----《Hello C++ Wrold!》(23)--(C/C++)
java·c语言·javascript·数据结构·c++·算法·leetcode
亚历克斯神2 分钟前
Java 25 模式匹配增强:让代码更简洁优雅
java·spring·微服务
星辰徐哥4 分钟前
Rust异步测试与调试的实践指南
android·java·rust
星河耀银海6 分钟前
C++ 运算符重载:自定义类型的运算扩展
android·java·c++
Lee川10 分钟前
打字机是怎么炼成的:Chat 流式输出深度解析
前端·后端·面试
不会敲代码118 分钟前
我写了一个 HTML 文件,把 JS 事件循环彻底搞懂了
前端·javascript·面试
feng_blog668822 分钟前
C++线程池|解决死锁、崩溃、丢任务所有痛点
java·开发语言·c++
挽星安1 小时前
代码随想录算法训练营第五十天|卡码网 99 岛屿数量、卡码网 100 最大岛屿的面积
算法