LeetCode:26. 删除有序数组中的重复项

简介

题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/

解决方式:数组 + 双指针

这是作者学习众多大神的思路进行解题的步骤,很推荐大家解题的时候去看看题解里面大佬们的思路、想法!

推荐查看Max大佬所作题解。

双指针

解题思路:双指针,一个指针 p 作为数组前面的唯一数字序列的最后一位,一个指针 q 迭代整个数组寻找与最后一位不同的数字,找到了就将其放在最后一位的下一位,然后 p、q 指针都下移,没找到则 q 指针下移继续寻找,直到迭代完整个数组。

java 复制代码
class Solution {
    public int removeDuplicates(int[] nums) {
        // 边界处理
        if(nums.length == 0 || nums == null){
            return 0;
        }
        // 双指针
        // p相当于是目标唯一数字序列的最后一位,而q则用来迭代数组剩余元素
        int p = 0;
        int q = 1;
        while(q < nums.length){
            if(nums[p] != nums[q]){
                // 不相等,找到有序不严格递增数组的唯一元素,设置在唯一数字序列中
                nums[p + 1] = nums[q];
                // 唯一数字序列最后一位更迭
                p++; 
            }
            // 相等,q前进寻找不等元素
            q++;
        }
        // 返回结果
        return p + 1;
    }
}

双指针优化

初始数组可能每一个元素都唯一,所以可以避免自己覆盖自己。

java 复制代码
class Solution {
    public int removeDuplicates(int[] nums) {
        // 边界处理
        if(nums.length == 0 || nums == null){
            return 0;
        }
        // 双指针
        // p相当于是目标唯一数字序列的最后一位,而q则用来迭代数组剩余元素
        int p = 0;
        int q = 1;
        while(q < nums.length){
            if(nums[p] != nums[q]){
                // 优化,防止数组中的所有元素本来就唯一
                if(q - p > 1){
                    // 不相等,找到有序不严格递增数组的唯一元素,设置在唯一数字序列中
                    nums[p + 1] = nums[q];
                }
                // 唯一数字序列最后一位更迭
                p++; 
            }
            // 相等,q前进寻找不等元素
            q++;
        }
        // 返回结果
        return p + 1;
    }
}
相关推荐
white-persist16 小时前
【vulhub weblogic CVE-2017-10271漏洞复现】vulhub weblogic CVE-2017-10271漏洞复现详细解析
java·运维·服务器·网络·数据库·算法·安全
汀、人工智能16 小时前
[特殊字符] 第9课:三数之和
数据结构·算法·数据库架构·图论·bfs·三数之和
汀、人工智能16 小时前
[特殊字符] 第10课:接雨水
数据结构·算法·数据库架构·图论·bfs·接雨水
辰痕~16 小时前
数据结构-第一节课
数据结构
故事和你9116 小时前
蓝桥杯-2025年C++B组国赛
开发语言·软件测试·数据结构·c++·算法·职场和发展·蓝桥杯
py有趣17 小时前
力扣热门100题之合并区间
算法·leetcode
派大星~课堂17 小时前
【力扣-138. 随机链表的复制 ✨】Python笔记
python·leetcode·链表
cpp_250117 小时前
P10108 [GESP202312 六级] 闯关游戏
数据结构·c++·算法·动态规划·题解·洛谷·gesp六级
Lzh编程小栈17 小时前
数据结构与算法之队列深度解析:循环队列+C 语言硬核实现 + 面试考点全梳理
c语言·开发语言·汇编·数据结构·后端·算法·面试
AbandonForce17 小时前
模拟实现vector
开发语言·c++·算法