首页 > 其他分享 >移除元素

移除元素

时间:2024-09-29 19:49:57浏览次数:7  
标签:val nums int 元素 移除 readIndex removeElement 指针

第一个想法就是利用两个for循环暴力解决

#include <iostream>  
#include <vector>  
  
using namespace std;  
  
class Solution {  
public:  
    int removeElement(vector<int>& nums, int val) {  
        int size = nums.size();  
        int writeIndex = 0; // 用来记录当前应该写入的索引位置  
        for (int readIndex = 0; readIndex < size; readIndex++) {  
            if (nums[readIndex] != val) { // 发现不需要移除的元素,则写入到当前位置  
                nums[writeIndex] = nums[readIndex];  
                writeIndex++; // 写入位置后移  
            }  
        }  
        return writeIndex; // 返回新的数组大小  
    }  
};  
  
int main() {  
    // 示例输入  
    vector<int> nums = {3, 2, 2, 3};  
    int val = 3;  
      
    // 创建Solution对象并调用removeElement函数  
    Solution solution;  
    int newLength = solution.removeElement(nums, val);  
      
    // 输出结果  
    cout << "New array size: " << newLength << endl;  
    cout << "New array: ";  
    for (int i = 0; i < newLength; i++) {  
        cout << nums[i] << " ";  
    }  
    cout << endl;  
      
    return 0;  
}

第二个双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新 新数组下标的位置

#include <stdio.h>  
  
int removeElement(int* nums, int numsSize, int val) {  
    int i = 0; // 指向当前有效元素的下一个位置  
    for (int j = 0; j < numsSize; j++) {  
        if (nums[j] != val) {  
            nums[i] = nums[j]; // 将不等于val的元素移到前面  
            i++; // 有效元素个数增加  
        }  
    }  
    return i; // 返回新数组的长度  
}  
  
int main() {  
    int nums[] = {3, 2, 2, 3};  
    int val = 3;  
    int numsSize = sizeof(nums) / sizeof(nums[0]);  
      
    int newLength = removeElement(nums, numsSize, val);  
        
    printf("新的数组长度为: %d\n", newLength);  
    for (int i = 0; i < newLength; i++) {  
        printf("%d ", nums[i]);  
    }  
    printf("\n");  
      
    return 0;  
}

标签:val,nums,int,元素,移除,readIndex,removeElement,指针
From: https://www.cnblogs.com/xiaoyanglili/p/18144342

相关文章

  • JS数组指针prev、current、next的实现方式,涉及是否删除当前元素的情况分析
    背景由于业务,需要做一个循环切换的轮播图效果,循环展示列表中的每个item,但是由于切换(从左往右移动,遇到末尾则跳到开头)的过程中可能会删掉当前元素,所以需要更新下标后再切换。由于涉及到几个临界条件,这里列出来处理方式,以便后续参考。代码这里给出的简化过后的代码:<template>......
  • 代码随想录算法训练营Day03-链表 | LC203移除链表元素、LC707设计链表、LC206反转链表
    目录前言LeetCode203.移除链表元素思路完整代码LeetCode707.设计链表思路完整代码LeetCode206.反转链表思路完整代码今日总结前言拖延症犯了,哈哈,拖了一天LeetCode203.移除链表元素给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val......
  • css伪类元素初识
    昨天想写一个登陆网站,但是怎么都实现不了图片里+表单,搜索发现需要css的伪类元素帮助,特意学习常见的伪类元素在CSS中,:before和:after是伪元素,它们可以用于在指定元素的内容之前或之后插入内容。这两个伪元素非常强大,常用于装饰性元素或者清除浮动等。关于:before和:after的一......
  • 代码随想录算法训练营第三天|203.移除链表元素,707.设计链表,206.反转链表
    203.移除链表元素文章链接:https://programmercarl.com/0203.移除链表元素.html#算法公开课视频讲解:https://www.bilibili.com/video/BV18B4y1s7R9题目出处:https://leetcode.cn/problems/remove-linked-list-elements/卡哥在这里讲解了为什么要使用虚拟头节点,以及使用和不使......
  • 【HTML|第1期】HTML5视频(Video)元素详解:从起源到应用
    日期:2024年9月9日作者:Commas签名:(ง•_•)ง积跬步以致千里,积小流以成江海……注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^-^1.01365=37.7834;0.99365=0.02551.02365=1377.4083;0.......
  • 算法训练营第三天| 203.移除链表元素、707.设计链表、206.反转链表
    203.移除链表元素状态:完成个人思路:首先令head符合条件,之后判断这个head是否为空,空的话返回空节点;非空的话继续进行。令pre=head;cur=head->next,只要cur非空,就判断cur的值的情况,如果需要删除,就改变pre->next和cur;如果不需要删除就继续检查下一个。看完讲解视频之后的想法:我......
  • HTML中常用的编排表单标签和以块级元素、内联(行内)元素!
    #本文详细介绍HTML中列表标签中表单<form></form>和块级元素、内联元素的使用#一、常用的编排表单标签1、表单标签①前言HTML中的表单是用于收集用户输入信息并将其提交给服务器进行处理的重要元素。②表单标签<form>表单由<form>标签开始,以</form>标签结束。在<f......
  • rust交换数组中的两个元素
    不可以直接用std::mem::swap,因为这个函数需要拿两个可变引用,但是不可以同时拿两个这个数组的可变引用。所以要么手写:lettmp=a[i];a[i]=a[j];a[j]=tmp;要么用Vec::swap:a.swap(i,j);其内部实现:fnswap(&mutself,a:usize,b:usize){unsafe{//......
  • Unity UI Tookite:实现命令控制台 [自定义元素]
    目录前言功能需求基础逻辑实现——输入输出分离逻辑实现——命令解析/历史指令切换历史指令解析指令基于反射的命令组自动装载逻辑实现——命令提示逻辑实现——定位报错逻辑实现——内容滚动/元素铺满逻辑实现——可变文本块最后前言最近在将Godot项目重写至Unit......
  • 检查 Effect-TS 选项中的元素:实用指南
    effect-ts提供了检查option是否包含特定值的方法。这些函数允许您使用自定义等价函数或默认等价来确定选项中是否存在值。在本文中,我们将探讨检查选项中元素的两个关键函数:o.containswith和o.contains。示例1:使用o.containswith检查具有自定义等效性的元素概......