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

news/2024/6/19 2:15:00 标签: 1024程序员节

问题描述

代码解决以及思想 

解法一

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的新长度。

解法二 

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;  // 返回新长度
    }
};


http://www.niftyadmin.cn/n/5118045.html

相关文章

AOP 笔记

AOP【面向切面编程】 作用&#xff1a;在不惊动原始设计的基础上进行功能增强。 无侵入式编程 连接点&#xff1a;程序执行的任意位置&#xff0c;SpringAOP中&#xff0c;理解为方法的执行。 切入点&#xff1a;匹配连接点的式子,要追加功能的方法 通知&#xff08;写在通…

Spark_SQL-DataFrame数据写出以及读写数据库(以MySQl为例)

一、数据写出 &#xff08;1&#xff09;SparkSQL统一API写出DataFrame数据 统一API写法&#xff1a; 常见源写出&#xff1a; # cording:utf8from pyspark.sql import SparkSession from pyspark.sql.types import StructType, IntegerType, StringType import pyspark.sql.fu…

代码随想录-栈与队列|ACM模式(1024程序员节)

目录 20. 有效的括号 题目描述&#xff1a; 输入输出描述&#xff1a; 思路和想法&#xff1a; 1047. 删除字符串中的所有相邻重复项 题目描述&#xff1a; 输入输出描述&#xff1a; 思路和想法&#xff1a; 150. 逆波兰表达式求值 题目描述&#xff1a; 输入输出描…

如何解决网站被攻击的问题?

在数字时代&#xff0c;网站安全问题日益突出&#xff0c;网络攻击的形式不断演进&#xff0c;因此&#xff0c;保护网站免受威胁至关重要。本文将探讨如何解决网站被攻击的问题&#xff0c;分析未来的网络攻击形式&#xff0c;并提供一些通俗易懂的建议&#xff0c;以加强网站…

前端面试怎么总问watch和computed区别

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 在现代前端的面试中&#xff0c;vue和react是面试过程中基本必问的技术栈&#xff0c;其中在聊到Vue响应式话题时&am…

专利背后的故事 | 一种邮件安全控制方法

Part 01 专利发明的初衷 邮件系统是企业信息化过程中不可或缺的通讯软件。邮件系统为企业员工以及外部客户提供电子邮件通讯服务是其基本功能。一般企业可采取自建、租用、云端部署等多种方案。 虽然邮件系统对企业的业务往来如此重要&#xff0c;但是电子邮件从诞生到今天&…

重大技术问题,iPhone 15 Pro Max面临“烧屏门”风波 | 百能云芯

近期&#xff0c;社交媒体平台上陆续涌现大量用户和数码博主就iPhone 15 Pro Max出现烧屏问题的投诉与评论。 烧屏问题是OLED屏幕常见的一个缺陷&#xff0c;这是由OLED屏幕发光机制引发的&#xff0c;OLED屏幕可视为由无数微小的灯泡-像素点构成&#xff0c;这些像素点可以独立…

少儿编程C++之001-dev c++安装与配置

环境&#xff1a; mac book pro, arm64, m1 使用JetBrain出品的CLine-IDE&#xff0c;强烈推荐: 最重要的是&#xff0c;一键安装&#xff0c;一键安装&#xff0c;一键安装&#xff0c;无需任何配置啊。。。。 使用VS Code&#xff0c;不太推荐: 安装插件多&#xff0c;还需…