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

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

🎈主页传送门:良木生香

🔥个人专栏:《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

paperxie 毕业论文:本科论文全流程智能写作神器,12000 字高质量论文一键生成

paperxie 毕业论文:本科论文全流程智能写作神器,12000 字高质量论文一键生成

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 在本科阶段,毕业论文无疑是检验四年学习成果的 “终极大考”。从选题定题、文献搜集、框架搭建,到内容撰写、格式规范、查重降重,每一个环节都让无数本科生倍感压力。尤其是 12000 字的本科毕业论文,不仅要求内容详实、逻辑严谨,更要贴合学术规范,不少学子在写作过程中陷入 “选题迷茫、文献匮乏、内容空洞、格式混乱” 的困境,耗费大量时间却难以达到理想效果。 而 paperxie 论文写作平台的本科毕业论文写作功能,凭借全流程智能化、本土化适配、

By Ne0inhk

Meta-Llama-3-8B-Instruct避坑指南:快速部署常见问题全解

Meta-Llama-3-8B-Instruct避坑指南:快速部署常见问题全解 1. 部署前必知:Llama 3-8B到底适不适合你? 在决定是否部署 Meta-Llama-3-8B-Instruct 之前,先搞清楚它能做什么、不能做什么。很多人一上来就拉镜像、跑服务,结果卡在显存不足、加载失败、中文输出乱七八糟等问题上,白白浪费时间。 1.1 模型定位与适用场景 Meta-Llama-3-8B-Instruct 是一个专为指令遵循和对话任务优化的中等规模模型。它的核心优势在于: * 英文能力极强:MMLU 测试得分超过68,接近 GPT-3.5 水平 * 代码生成表现亮眼:HumanEval 超过45分,比 Llama 2 提升约20% * 支持8k上下文:适合长文档摘要、多轮对话不丢记忆 * 单卡可运行:GPTQ-INT4量化版本仅需4GB显存,RTX 3060即可推理 但也要注意它的短板: * 中文能力一般:训练数据以英语为主,中文回答常出现逻辑跳跃或表达生硬 * 70B才是“大”

By Ne0inhk

如何在Mac上实现离线AI绘画:Mochi Diffusion完全指南

如何在Mac上实现离线AI绘画:Mochi Diffusion完全指南 【免费下载链接】MochiDiffusionRun Stable Diffusion on Mac natively 项目地址: https://gitcode.com/gh_mirrors/mo/MochiDiffusion 在AI绘画技术日益普及的今天,Mochi Diffusion 为您提供了在Mac设备上原生运行的稳定扩散模型解决方案。这款基于SwiftUI开发的应用程序专为Apple Silicon芯片深度优化,让您无需网络连接即可享受高效的本地AI图像创作体验。🎨 为什么选择本地AI绘画工具? Mochi Diffusion 与其他云端AI绘画工具相比,具有以下显著优势: * 数据隐私绝对保障:所有图像生成过程都在您的设备上完成,敏感信息不会离开本地 * 离线创作无忧:无论身处何地,只要有Mac就能进行AI艺术创作 * 性能极致优化:针对M1、M2等Apple Silicon芯片的Neural Engine进行专门调优 快速入门:从零开始搭建创作环境 获取应用程序源码 通过以

By Ne0inhk