手撕C语言题典——移除元素(顺序表)

搭配使用更佳哦~~

数据结构之顺顺顺------顺序表-CSDN博客

数据结构之顺序表的基本操作-CSDN博客

前面学了顺序表的相关知识,我们来尝试做一下关于顺序表的经典算法题~

前言

27. 移除元素 - 力扣(LeetCode)

移除元素作为力扣上的一道不算太难的算法题,很适合刚学过顺序表的我们拿来练手,大家也可以去力扣上自己 try 一下~

一.思路

我们先来理解一下题干:假设我们有一个这样的数组 nums:
nums

假设 val = 3 ,那我们需要将 nums 中的 3 全部移除,于是我们数组元素 4 - > 2 ,这就是题干大致的意思,理解了题干后我们开始求解。

1)临时数组

我们首先可以想到最简单的方法就是,创建一个新的数组,遍历原数组,将不为 val 的值放入新数组。

但由于题干中的限定条件:

这个方法只能pass掉。

2) 双指针

我们创建两个指针:

src:源数据

dst:目标指针

我们假设还是这个数组元素,使用 src 这个指针开始遍历,如果元素是 val (也就是要删除的数据)就往后面的元素去遍历,当指向不是 val 的元素时,我们就把 src 指向的元素给给 dst ,然后 dst 自身 ++ ,向后面元素走一位, src ++。依次往后遍历 ,最终 src 跳出数组,dst 刚刚好等于2,就是我们想要得到的新数组。

我们可以总结一下双指针的思路了:

创建两个指针变量 src , dst

  • 若 src 指向的值为 val,则 src++
  • 若 src 指向的值不为 val ,nums dst = nums src ,src ++,dst ++

二.代码实现

cpp 复制代码
int removeElement(int* nums, int numsSize, int val) {
//先创建两个变量
int src, dst;
src = dst = 0;
while (src < numsSize)
{
 	if (num[src] == val)
	{
		src++;
	}
	else {
		//赋值,两指针
		nums[dst] = nums[src];
		dst++;
		src++;
	}
}
//此时刚好dst是我们需要的新数组有效长度
return dst;
    
}

下一篇会接着将另一道有关顺序表的算法题~~

🎈🎈完结撒花🎈🎈

相关推荐
艾伦_耶格宇43 分钟前
【AI】-4 OpenCode Go 接入 Obsidian 完整指南
运维·开发语言·人工智能·agent·opencode
旋生万物1 小时前
【终极实战】用Python从零“生成“一个宇宙:螺旋干涉模型的代码实现
开发语言·前端·人工智能·react.js·php·wpf
ShineWinsu1 小时前
对于 C++:C++14中从变量模板、泛型 Lambda 到并发与字面量的解析
c++·算法
土司大王2 小时前
LeetCode hot100——合并两个有序链表
算法·leetcode·链表
码行山野赴时序归途2 小时前
算法效率的度量(上):时间复杂度中的对数思维
c语言·数据结构·算法
16月6日-晴2 小时前
Java面向对象进阶—多态
java·开发语言
冯汉栩2 小时前
Swift Control RollingCountdownView(动画倒计时)
开发语言·ios·swift
lisanmengmeng2 小时前
搭建elk环境并接入frostmourne,实现监控报警效果(五)
开发语言·elk·日志·日志监控
算AI2 小时前
基于LLM的无人机仿真测试:新方法竞赛夺佳绩
人工智能·深度学习·算法·机器学习·ai
oh,huoyuyan3 小时前
JS 动态网页抓不到?试试火车采集器网页抓取工具
开发语言·javascript·ecmascript