当前位置: 首页 > article >正文

【力扣刷题实战】(顺序表)移除元素

大家好,我是小卡皮巴拉 

文章目录  

目录

力扣题目: 移除元素

题目描述

示例 1:

示例 2:

解题思路

具体思路

题目要点

完整代码

兄弟们共勉 !!! 


每篇前言 

博客主页:小卡皮巴拉

咱的口号:🌹小比特,大梦想🌹

作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请大佬们批评斧正。

 

力扣题目: 移除元素

原题链接:移除元素

题目描述

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k

示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2,_,_]
解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3,_,_,_]
解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。
注意这五个元素可以任意顺序返回。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

解题思路

我们在这里用到双指针法来进行数组去重:给定一个排序数组,需要在原地删除重复出现的元素,使每个元素只出现一次,并返回移除后数组的新长度。可以使用快慢指针来实现,快指针用于遍历数组,慢指针用于指向已处理元素的最后一个位置。

具体思路

  1. 初始化双指针
    • 使用两个指针 dst 和 src,都初始化为0。
    • dst 指针用于记录当前不等于 val 的元素应该放置的位置(即目标位置)。
    • src 指针用于遍历整个数组。
  2. 遍历数组
    • 遍历数组 nums,使用 src 指针从0开始遍历。
    • 如果 nums[src] 不等于 val,则将 nums[src] 的值赋给 nums[dst],并且 dst 指针向后移动一位(dst++,在Python中表示为 dst += 1)。
    • 如果 nums[src] 等于 val,则只移动 src 指针,dst 指针保持不变。
  3. 返回结果
    • 遍历完成后,dst 指针的值即为不等于 val 的元素数量。
    • 返回 dst 即可。

题目要点

原地操作:不增加额外空间,直接在原数组上修改。

双指针:利用两个指针遍历数组,一个记录结果,一个用于遍历。

顺序可变:输出元素可不必保持原顺序。

返回数量:最终返回非目标值的元素数量。

完整代码(C语言)

int removeElement(int* nums, int numsSize, int val) 
{
    int dst,src = 0;
    while(src < numsSize)
    {
        //src的值为val,src往后走
        //src的值不为val,src赋值给dst,src和dst都往后走
        if(nums[src] != val)
        {
            nums[dst] = nums[src];
            dst++;
        }
        src++;
    }
    return dst;
}

兄弟们共勉 !!! 

码字不易,求个三连

抱拳了兄弟们!


http://www.kler.cn/news/341377.html

相关文章:

  • 图像分割任务中,对于feature maps的Element-wise addition和concatenation操作都可以视为特征融合吗?
  • 基于SpringBoot剧本杀管理系统 【附源码】
  • 第一课 Vue环境准备
  • 模拟实现消息队列(基于SpringBoot实现)
  • C++学习笔记(55)
  • Git面试题总结
  • 成都睿明智科技有限公司靠谱吗怎么样?
  • PHP常见机制
  • 2024-10-09 问AI: [AI面试题] 描述数据预处理在 AI 中的重要性
  • 网络安全有救了,37所高校新增网络安全空间安全专业
  • 【AIGC】2022-CVPR-利用潜在扩散模型进行高分辨率图像合成
  • 【数据结构】【链表代码】相交链表
  • Git 的工作目录、本地仓库和远程仓库
  • Redis:分布式 - 哨兵
  • 简易登录注册;测试类;postman测试;
  • 03. prometheus 监控 Linux 主机
  • 推荐系统:用户行为建模方法
  • Java基础:面向对象编程(1)
  • 如何在uniapp(vue2)中使用Vue Router和router-view进行页面管理
  • Python循环练习