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;  // 返回新长度
    }
};
相关推荐
学传打活5 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续3)
微信公众平台·1024程序员节·汉字·昆仑正义文化
学传打活10 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng16818 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心20 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u0103055271 个月前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u0103055271 个月前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝1 个月前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u0103055271 个月前
Java图像处理实战指南
人工智能·1024程序员节
u0103055271 个月前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u0103055271 个月前
Java实用类应用精讲
人工智能·1024程序员节