算法刷题营【Day1】:: 27. 移除元素:快慢指针在顺序表中的应用与相关刷题

本内容是笔者结合《代码随想录》总结所得,记录学习过程,分享知识!


目录:
1. 开篇例题:27. 移除元素
2. 题解参考
3. 题解思路
4. 相关题
[ - - 4.1 26. 删除有序数组中的重复项 ]
[ - - 4.1 283. 移动零 ]
5. 相关题题解及简要思路
- - 5.1 26. 删除有序数组中的重复项
- - 5.1 283. 移动零


1. 开篇例题:27. 移除元素

例题:点击直飞

在这里插入图片描述
在这里插入图片描述


2. 题解参考

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int j = 0;							// j:慢指针
        for(int i = 0;i<nums.size();i++){	// i:快指针
            if(nums[i] != val){
                nums[j++] = nums[i];
            }
        }
        return j;
    }
};

3. 题解思路

步骤:

  1. 分别定义快慢指针,一般慢指针指向首元素,快指针视情而定。
  2. 本题中快指针探路,只要快指针指向值是指定值:则不执行
    nums[j++] = nums[i]; 实现元素的逻辑删除【数组中即:使用后续元素覆盖前驱元素】

4. 相关题

26. 删除有序数组中的重复项
283. 移动零


5. 相关题题解及简要思路

26. 删除有序数组中的重复项
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int res = 0;							// res:慢指针
        for(int i = 1;i<nums.size();i++){		// i:快指针
        // 此处当且仅当快指针指向值不等于慢指针指向值时,才庚戌慢指针
            if(nums[i] != nums[res]){			
                nums[++res] = nums[i];
            }
        }
        return res+1;
    }
};
283. 移动零
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int j = 0;							// j:慢指针
        for(int i = 0;i<nums.size();i++){	// i:快指针
            if(nums[i] != 0){
                nums[j++] = nums[i];
            }
        }
        // 结合题意处理剩余元素
        for(;j<nums.size();j++){			
            nums[j] = 0;
        }
    }
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NPC的白话文谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值