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

大家好,我是小卡皮巴拉

文章目录

目录

[力扣题目: 移除元素](#力扣题目: 移除元素)

题目描述

[示例 1:](#示例 1:)

[示例 2:](#示例 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 个元素之外留下了什么并不重要(因此它们并不计入评测)。

解题思路

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

具体思路

初始化双指针:

  • 使用两个指针 dst 和 src,都初始化为0。
  • dst 指针用于记录当前不等于 val 的元素应该放置的位置(即目标位置)。
  • src 指针用于遍历整个数组。

遍历数组:

  • 遍历数组 nums,使用 src 指针从0开始遍历。
  • 如果 nums[src] 不等于 val,则将 nums[src] 的值赋给 nums[dst],并且 dst 指针向后移动一位(dst++,在Python中表示为 dst += 1)。
  • 如果 nums[src] 等于 val,则只移动 src 指针,dst 指针保持不变。

返回结果:

  • 遍历完成后,dst 指针的值即为不等于 val 的元素数量。
  • 返回 dst 即可。

题目要点

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

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

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

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

完整代码(C语言)

cs 复制代码
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;
}

兄弟们共勉 !!!

码字不易,求个三连

抱拳了兄弟们!

相关推荐
想吃火锅10052 分钟前
【leetcode】189.轮转数组js
开发语言·javascript·leetcode
小小、码农5 分钟前
〖Linux文件系统〗:彻底打通文件 IO 全链路
linux·开发语言·数据结构·c++·系统
大侠归来9 分钟前
cJSON 源码解析:parse_string 函数深入剖析
linux·网络·算法
番茄灭世神1 小时前
PN学堂GD32教程第11篇——I2C与EEPROM
c语言·stm32·单片机·嵌入式·gd32
余额瞒着我当琳1 小时前
C++ map 底层与AVL 树
开发语言·c++·算法
释厄6231 小时前
物理发展史·量子力学=节点2·牛顿力学=节点3·宇宙的语言算法AI
人工智能·算法·microsoft
CQU_JIAKE1 小时前
9.30【A】
算法
阿钱真强道2 小时前
27 嵌入式操作系统 | C 网关:串口 ⇄ UDP 转发(先用 UDP 当上位机替身)
c语言·单片机·网关·udp·uloop
INGNIGHT2 小时前
1897 · 会议室 3(扫描线)
数据结构·算法
All for pursuit.2 小时前
【贪心-2】253.会议室 II
数据结构·c++·算法·leetcode