【Leetcode】27.移除元素

题目链接:
https://leetcode.cn/problems/remove-element/description/?envType=study-plan-v2&envId=top-interview-150

题目描述:

解题思路:

使用双指针算法,指针p1指向列表的首元素,指针p2指向列表的末尾元素,使用res记录返回值

  • 1.当指针p2指向的元素等于val时,此时val已经在末尾了,因此需要将指针p2前移一位即可,并且continue,直到指针p2移动到不等于val的位置
  • 2.当指针p1指向的元素等于val时,由于此时p2指向的元素不等于val,但是指针p2之后的元素等于val,因此将p1位置的元素与p2位置元素交换即可
  • 3.while循环结束条件:p1<=p2
  • 时间复杂度O(n)
  • 空间复杂度O(1)

实现代码:

cpp 复制代码
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int p1 = 0;
        int p2 = nums.size()-1;
        int res = 0;

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

        return res;
    }
};
相关推荐
点云SLAM13 分钟前
点云配准算法之NDT算法原理详解
人工智能·算法·数学建模·点云配准算法·ndt配准算法·概率模型配准算法
AI蜗牛车23 分钟前
【LLM+Code】Cursor Agent 46.11 版本Prompt&Tools最细致解读
人工智能·算法·语言模型
每次的天空1 小时前
Android第三次面试总结(网络篇)
网络·面试·职场和发展
奋进的小暄1 小时前
数据结构(java)二叉树的基本操作
java·数据结构·算法
是店小二呀1 小时前
【优选算法 | 滑动窗口】滑动窗口算法:高效处理子数组和子串问题
c++·算法
robin_suli1 小时前
链表系列一>两两交换链表中的结点
数据结构·算法·链表
KyollBM2 小时前
【CF】Day44——Codeforces Round 908 (Div. 2) C + Codeforces Round 1020 (Div. 3) DE
算法
努力学习的小廉2 小时前
我爱学算法之—— 二分查找(上)
开发语言·c++·算法
小彭律师2 小时前
SinSR模型剪枝实验报告
人工智能·算法·剪枝
莹莹学编程—成长记4 小时前
string的模拟实现
服务器·c++·算法