【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;
    }
};
相关推荐
你怎么知道我是队长18 分钟前
C语言---循环结构
c语言·开发语言·算法
艾醒21 分钟前
大模型面试题剖析:RAG中的文本分割策略
人工智能·算法
纪元A梦3 小时前
贪心算法应用:K-Means++初始化详解
算法·贪心算法·kmeans
_不会dp不改名_3 小时前
leetcode_21 合并两个有序链表
算法·leetcode·链表
mark-puls3 小时前
C语言打印爱心
c语言·开发语言·算法
Python技术极客3 小时前
将 Python 应用打包成 exe 软件,仅需一行代码搞定!
算法
吃着火锅x唱着歌3 小时前
LeetCode 3302.字典序最小的合法序列
leetcode
睡不醒的kun3 小时前
leetcode算法刷题的第三十四天
数据结构·c++·算法·leetcode·职场和发展·贪心算法·动态规划
吃着火锅x唱着歌3 小时前
LeetCode 978.最长湍流子数组
数据结构·算法·leetcode
我星期八休息4 小时前
深入理解跳表(Skip List):原理、实现与应用
开发语言·数据结构·人工智能·python·算法·list