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

问题描述

代码解决以及思想

解法一

cpp 复制代码
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int len = 0; // 初始化一个用于记录非目标值个数的变量

        // 创建一个迭代器 it,指向 nums 的开头
        vector<int>::iterator it = nums.begin();

        // 遍历 nums
        while (it != nums.end()) {
            if (*it == val) {
                // 如果当前元素等于目标值 val,需要将其移除
                nums.erase(it); // 使用 erase 函数移除元素
            } else {
                // 如果当前元素不等于目标值 val,增加非目标值的计数 len,并将迭代器 it 向前移动
                len++;
                it++;
            }
        }

        return len; // 返回新长度
    }
};

代码的基本思想是使用一个迭代器 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的新长度。

解法二

cpp 复制代码
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int left = 0;         // 左指针,指向数组开头
        int right = nums.size();  // 右指针,指向数组末尾

        // 循环直到左指针小于右指针
        while (left < right) {
            if (nums[left] == val) {
                // 如果左指针指向的元素等于目标值 val,将左指针元素替换为右指针前面的元素
                nums[left] = nums[right - 1];
                right--;  // 右指针向左移动,排除一个目标值
            } else {
                // 如果左指针指向的元素不等于目标值 val,增加左指针,继续遍历
                left++;
            }
        }

        return left;  // 返回新长度
    }
};
相关推荐
数据皮皮侠AI1 天前
中国土地利用驱动因子数据集(9种驱动因子/裁剪到省市/Tif)
大数据·人工智能·笔记·能源·1024程序员节
数据皮皮侠AI6 天前
上市公司耐心资本数据(2010-2025)
大数据·人工智能·笔记·能源·1024程序员节
开开心心就好7 天前
解决图片无页码添加功能的实用工具
javascript·python·安全·智能手机·pdf·音视频·1024程序员节
学传打活8 天前
【边打字.边学昆仑正义文化】_25_宇宙动植物的由来(1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
开开心心就好12 天前
用户推荐的文件解锁与强制操作工具
安全·智能手机·pdf·scala·音视频·symfony·1024程序员节
liguojun202517 天前
软硬一体智慧场馆系统推荐——助力场馆数字化高效升级
java·大数据·人工智能·物联网·1024程序员节
开开心心就好1 个月前
吾爱大佬原创的文件时间修改工具
安全·智能手机·pdf·电脑·智能音箱·智能手表·1024程序员节
开开心心就好1 个月前
近200个工具的电脑故障修复合集
安全·智能手机·pdf·电脑·consul·memcache·1024程序员节
数据皮皮侠AI1 个月前
中国城市可再生能源数据集(2005-2021)|顶刊 Sci Data 11 种能源面板
大数据·人工智能·笔记·能源·1024程序员节
计算机毕业论文辅导1 个月前
物联网实战:基于MQTT协议的智能家居数据传输系统设计与实现
1024程序员节