【数据结构-初阶】顺序表相关习题

【数据结构-初阶】顺序表相关习题

🎈主页传送门:良木生香

🔥个人专栏:《C语言》 《数据结构-初阶》 《程序设计》

🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离

上期回顾:在上一篇文章中(【数据结构-初阶】详解线性表(1)---顺序表),我们详细介绍了线性表系列第一种数据结构---顺序表,这个数据结构是以数组为底建立的,也学习了如何用线性表进行增删查改的操作,那么我们今天就用顺序表进行解题~~~

 

题目一:移除元素

这是题目链接:27.移除元素,下面是具体的题目与示例:

由题意知,这道题是想让我们将数组中值为val的元素删除,我们能怎么做呢?

创建新的数组?那不行,题目已经要求我们只能在原地进行操作了,就意味着不能创建新的数组来进行辅助

那该怎么办呢?简单,我们只需用上算法中最基础的---双指针算法了

我们用双指针,不一定用真的指针指向某个元素,有时也可以用下标,讲究的是一种算法思想,并没有一定的形式

我们用两个指针,刚开始都同事之下那个num数组的第一个元素,随后将其中一个指针用于遍历数组,如果两个指针指向的内容不相同,那就将内容进行交换,两个指针同时向后移动一位;如果相同,那就只有遍历的指针移动,下面是示意图:

这时候我们只用在交换的同时用一个变量记录一下,就可以得到数组中值不为val的元素个数了,下面是在平台上的具体代码:

void swap(int* a,int* b) //创建辅助函数,用于交换两个数字 { int temp=0; temp = *a; *a = *b; *b = temp; } int removeElement(int* nums, int numsSize, int val) { int* cur=nums; int* dest = nums; int count=0; while(cur<nums+numsSize) { if(*cur != val) { swap(cur,dest); dest++; count++; } cur++; } return count; }

要注意的是,我们在写交换函数的时候,传入的是地址,不是值,只有传值才能改变元素的值

下面是运行结果:

这是第一道题的题解~~~~

 

 

 

 

题目二:删除数组中的重复项

这是题目链接:26. 删除有序数组中的重复项,下面是具体的题目:

由题意知,这道题是想让我们将数组中重复的元素删除,同样的不能创建新的数组,那就继续使用双指针算法:用两个指针,dest与cur,如果*dest !=*cur,那就交换*dest与*cur的值,两者同时++即可,如果两者指向的元素相等,那就只有cur++,,dest保持不变

 


示意图如下:

以此类推,最后可推出示例的0,1,2,3,4,....,下面是我在平台上提交的代码:

int removeDuplicates(int* nums, int numsSize) { //这道题可以用双指针的方法 int* dest = nums; int* cur = nums+1; while(cur<nums+numsSize){ if(*dest!=*cur){ dest++; *dest = *cur; } cur++; } return dest-nums+1; }

运行结果为:

 

 

 

题目三:合并两个有序数组

这是题目链接:88. 合并两个有序数组,下面是具体题目:

这道题就是想让我们将nums2放到num1里面,然后在对整个nums1进行排序

我们可以先将nums2放到nums1的末尾,再排序,这样确实可以达到目的,时间复杂度是O(n),但是这样就不能达到进阶的要求了,我们还能怎么做呢?小意思,我们可以从nums1最后的地方开始放进去,用三个指针,一个指向nums1非0元素的最后一个元素,一个指向nums1的末尾,一个指向nums2的末尾,如下面的的视频所示:

下面是具体的代码:

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) { int* p1 = nums1+m-1; int* p2 = nums2+n-1; int* p3 = nums1+m+n-1; while(p1>=nums1&&p2>=nums2) { if(*p1>*p2) { *p3-- = * p1--; } else *p3-- = *p2--; } while(p2>=nums2) { *p3-- = *p2--; } }

这是运行结果:

 

 

 

那么以上就是顺序表的几道简单算法题的题解啦,感谢大佬们的阅读~~~

 

文章是自己写的哈,有什么描述不对的、不恰当的地方,恳请大佬指正,看到后会第一时间修改,感谢您的阅读。

Read more

零基础也能上手!GLM-4.6V-Flash-WEB视觉模型一键部署教程

零基础也能上手!GLM-4.6V-Flash-WEB视觉模型一键部署教程 你有没有试过:拍一张超市小票,想立刻知道总金额和消费时间,却要等AI“思考”五六秒?上传一张产品说明书图片,问“第三行第二列的参数代表什么”,结果返回一段泛泛而谈的描述?不是模型不够聪明,而是很多多模态工具太重了——动辄需要A100显卡、整套Docker环境、半小时配置时间,光是装依赖就能劝退八成开发者。 GLM-4.6V-Flash-WEB不一样。它不堆参数,不拼显存,专为“今天就想跑起来”而生。一块RTX 4060 Ti,一条命令,三分钟内,你就能在浏览器里拖拽上传任意图片,输入中文问题,看着答案一行行流式输出——就像和真人对话一样自然。没有Python基础?没关系。没碰过GPU?也没关系。这篇教程,就是写给完全没接触过多模态模型的你。 我们不讲Transformer结构图,不推导注意力公式,只说清楚三件事:怎么让它动起来、怎么让它听懂你的图、怎么把它变成你自己的小助手。 1. 为什么说它真·零基础友好

By Ne0inhk
华为交换机首次开局配置完整步骤(Console + Web)

华为交换机首次开局配置完整步骤(Console + Web)

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 新到一台华为交换机(如S5735-L、S6730等),通电后指示灯闪烁,但无法管理、不能上网 ——这是所有网工都会经历的“裸机时刻”,别慌!首次开局只需5步: 从Console线连接,到设置IP、开启Web网管,今天就来讲讲零基础、可操作、带命令的完整流程,助你10分钟内让交换机“活”起来。 一、准备工作 所需工具: 💡 提示:华为交换机出厂默认无IP、无密码、Console口可用。 二、第1步:通过Console连接交换机 1.1 物理连接 * 将Console线一端插入交换机 Console口(通常标有“CON”) * 另一端插入电脑USB口 1.2 终端软件设置(以SecureCRT为例) * 协议:Serial * 波特率:9600

By Ne0inhk
【CVPR2025 DEIM】超详细!手把手训练自己的数据集教学:从源码下载,配置虚拟环境,准备数据集、训练、验证、推理测试 ,实现0到1的完整教学过程。本文在win系统上训练,最强实时目标检测算法!

【CVPR2025 DEIM】超详细!手把手训练自己的数据集教学:从源码下载,配置虚拟环境,准备数据集、训练、验证、推理测试 ,实现0到1的完整教学过程。本文在win系统上训练,最强实时目标检测算法!

🔥DEIM创新改进目录:全新DEIM有效涨点改进目录 | 包含各种最新顶会顶刊:卷积模块、注意力模块、特征融合模块、有效特征聚合提取模块,上采样模块、下采样模块,二次创新模块、独家创新,特殊场景检测等最全大论文及小论文必备创新改进点 🔥全新DEIM创新改进专栏地址:全网独家DEIM创新改进高效涨点+永久更新中(至少500+创新改进🗡剑指小论文、大论文)+小白也能简单高效跑实验+容易发各种级别小论文 本文目录 一、下载CVPR2025 DEIM官方源码  二、创新DEIM项目虚拟环境 第一步创建一个自己的虚拟环境: 第二步进入到自己的虚拟环境: 第三步:安装pytorch,建议不要安装太新版本 第四步:直接复制以下所有命令到控制台“终端里面粘贴回车运行” 三、准备自己的数据集和配置自己数据集步骤 3.1 本文以训练Visdrone2019无人机数据集为例 3.2 将自己数据集放到datasets文件夹里 3.3 配置数据步骤 四、使用DEIM训练自己的数据集 4.1

By Ne0inhk
《Web 自动化测试入门:从概念到百度搜索实战全拆解》

《Web 自动化测试入门:从概念到百度搜索实战全拆解》

一、自动化的核心概念 1. 定义:通过自动方式替代人工操作完成任务,生活中常见案例(自动洒水机、自动洗手液、超市闸机)体现了 “减少人力消耗、提升效率 / 质量” 的特点。 2. 软件自动化测试的核心目的: * 用于回归测试:软件迭代新版本时,验证新增功能是否影响历史功能的正常运行。 3. 常见面试题解析: * 自动化测试不能完全取代人工测试:需人工编写脚本,且功能变更后需维护更新,可靠性未必优于人工。 * 自动化测试不能 “大幅度降低工作量”:仅能 “一定程度” 减少重复工作,需注意表述的严谨性。 二、自动化测试的分类 自动化是统称,包含多种类型,核心分类及说明如下: 分类说明接口自动化针对软件接口的测试,目的是验证接口的功能、性能、稳定性等。UI 自动化 针对软件界面的测试,包含: 1. 移动端自动化:通过模拟器在电脑上编写脚本,测试手机应用;稳定性较差(受设备、

By Ne0inhk