• 80.每日一练:移除元素(力扣)


    问题描述

    代码解决以及思想 

    解法一

    1. class Solution {
    2. public:
    3. int removeElement(vector<int>& nums, int val) {
    4. int len = 0; // 初始化一个用于记录非目标值个数的变量
    5. // 创建一个迭代器 it,指向 nums 的开头
    6. vector<int>::iterator it = nums.begin();
    7. // 遍历 nums
    8. while (it != nums.end()) {
    9. if (*it == val) {
    10. // 如果当前元素等于目标值 val,需要将其移除
    11. nums.erase(it); // 使用 erase 函数移除元素
    12. } else {
    13. // 如果当前元素不等于目标值 val,增加非目标值的计数 len,并将迭代器 it 向前移动
    14. len++;
    15. it++;
    16. }
    17. }
    18. return len; // 返回新长度
    19. }
    20. };

    代码的基本思想是使用一个迭代器 it 遍历 nums 中的元素,同时使用变量 len 来记录非目标值的元素的个数。具体步骤如下:

    1. 初始化 len 为0,用于记录非目标值的元素个数。

    2. 使用迭代器 it 初始化为 nums 的开头(begin())。

    3. 进行循环,检查 it 是否等于 nums 的结束位置(end())。

    4. 在循环内部,检查 it 指向的元素是否等于给定的目标值 val

      • 如果相等,说明需要移除该元素,使用 nums.erase(it) 来移除当前元素,这会使vector的大小减小。注意,这里没有将 it 自增,因为在移除元素后,it 自动指向下一个元素。

      • 如果不相等,说明当前元素是非目标值,将 len 自增并将 it 自增,移向下一个元素。

    5. 循环结束后,len 将表示非目标值的元素个数。vector nums 中已经被修改,移除了所有值等于 val 的元素。

    6. 返回 len,表示修改后的vector的新长度。

    解法二 

    1. class Solution {
    2. public:
    3. int removeElement(vector<int>& nums, int val) {
    4. int left = 0; // 左指针,指向数组开头
    5. int right = nums.size(); // 右指针,指向数组末尾
    6. // 循环直到左指针小于右指针
    7. while (left < right) {
    8. if (nums[left] == val) {
    9. // 如果左指针指向的元素等于目标值 val,将左指针元素替换为右指针前面的元素
    10. nums[left] = nums[right - 1];
    11. right--; // 右指针向左移动,排除一个目标值
    12. } else {
    13. // 如果左指针指向的元素不等于目标值 val,增加左指针,继续遍历
    14. left++;
    15. }
    16. }
    17. return left; // 返回新长度
    18. }
    19. };

  • 相关阅读:
    论文阅读《PTR: Prompt Tuning with Rules for Text Classification》
    14款DevOps/SRE工具,助力提升运维效率
    神经网络每次输出不一样,神经网络输出值相同
    百度文库最新AI旋转验证码识别
    三维荧光学习记录--在Origin中绘制三维荧光光谱图(补充)及荧光区域积分(FRI)
    Spring(二)
    【七】redis缓存与数据库数据一致性
    vue3 + element plus实现侧边栏
    Spring核心与设计思想
    (刘二大人)PyTorch深度学习实践-卷积网络(基础篇)
  • 原文地址:https://blog.csdn.net/weixin_63779802/article/details/134012758