【Leetcode】26.删除有序数组中的重复项

题目链接:

https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/?envType=study-plan-v2&envId=top-interview-150

题目描述:


解题思路:

使用双指针算法(快慢指针),p1与p2分别指向第一个和第二个元素,p2为快指针,p1为慢指针。

  • nums.size() == 0时,直接return 0; 即可
  • nums.size() !=0时,p1作为慢指针指向第一个元素,p2作为快指针指向第二个元素,res 初始化为1
  • nums[p1] == nums[p2] 时,只需要将p2++即可
  • nums[p1] != nums[p2]时,只需要将p+1位置的元素与p2交换,同时指针p1和p2都移向下一个元素,由于此时优找到了一个新元素,因此res也要加1
  • 当p2指针超过nums.size(),说明数组遍历完成,结束循环

代码实现:

时间复杂度O(n)
空间复杂度O(1)

python 复制代码
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();

        if (n==0){
            return 0;
        }

        int p1 = 0;
        int p2 = 1;
        int res = 1;

        while(p2<n){
            if(nums[p1] == nums[p2]){
                p2++;
            }
            else{
                p1++;
                nums[p1] = nums[p2];
                p2++;
                res++;
            }
        }

        return res;
    }
};
相关推荐
loopne几秒前
AI网文写作实验笔记(十三):系列总结——12 篇实验、8 条核心结论,把“AI 写小说“每一步拆开验证
人工智能·经验分享·笔记·ai写作·智能写作
2601_967097224 分钟前
白光干涉仪品牌众多怎么筛选靠谱厂家?选购要点及优可测等品牌参考
人工智能
zandy10118 分钟前
claude code用不了?国内外AI 编程工具的演进与三类路径选择
人工智能
李帅朋10 分钟前
Softmax、LogSoftmax、交叉熵、NLLLoss 全套公式
深度学习·神经网络
武汉海翎光电11 分钟前
从零开始了解数据采集——工业数据采集新趋势:边缘计算与云计算的强强联合
人工智能·云计算·边缘计算
青少儿编程课堂12 分钟前
图形化编程实战:智能交通灯调度台,一个作品讲透循环、条件与广播
c++·python·算法·bfs·信息学竞赛
AI产品测评官15 分钟前
AI智能体在招聘场景的工程实践:屏幕语义理解与风控规避
人工智能·求职招聘
evans在进步15 分钟前
LeetCode 438 找到字符串中所有字母异位词:滑动窗口与排序解法详解
算法·leetcode·职场和发展
赵民勇16 分钟前
C++无锁编程详解
c++
TechEdu20260617 分钟前
[人工智能]GPT(OpenAI):模型体系、智能体与企业工程实践
人工智能·ai