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

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

🎈主页传送门:良木生香

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

Llama-Factory是否支持Transformer-XL结构?

Llama-Factory 是否支持 Transformer-XL 结构? 在当前大语言模型(LLM)快速迭代的背景下,微调已成为将通用预训练模型适配到垂直场景的核心手段。随着 LoRA、QLoRA 等参数高效微调技术的普及,开发者不再需要从零搭建训练流水线,而是借助如 LLama-Factory 这类“一站式”框架,实现低门槛、高效率的模型定制。 这类工具之所以流行,关键在于其对主流架构的高度抽象与统一支持——无论是 LLaMA、Qwen 还是 ChatGLM,用户只需指定模型路径和配置参数,即可启动完整的微调流程。但当面对一些早期或非典型的模型结构时,比如 Transformer-XL,问题就变得复杂了:这些模型是否也能被无缝接入?它们的设计特性是否会打破现有框架的假设前提? 要回答这个问题,不能只看官方文档有没有列出某个名字,而必须深入理解 LLama-Factory 的底层机制,以及 Transformer-XL 本身的架构特点。 LLama-Factory 并不是一个独立的模型实现库,它本质上是建立在 Hugging Face Transformers 和

By Ne0inhk
从论文到实践:Stable Diffusion模型一键生成高质量AI绘画

从论文到实践:Stable Diffusion模型一键生成高质量AI绘画

🏡作者主页:点击!  🤖编程探索专栏:点击! ⏰️创作时间:2024年12月24日10点02分 神秘男子影,   秘而不宣藏。 泣意深不见, 男子自持重,    子夜独自沉。  AI绘画一键生成美图-变成画家 本地部署SD模型,一键即可生成自己想要绘制的图画,本文包括论文原理讲解和代码复现 论文讲解 论文题目:High-Resolution Image Synthesis with Latent Diffusion Models(基于潜在扩散模型的高分辨率图像合成) 论文被计算机视觉顶会CVPR 2022收录 Stable diffusion是一个基于Latent Diffusion Models(潜在扩散模型,LDMs)的文图生成(text-to-image)模型。它建立在自注意力机制和扩散过程的基础上。它的设计灵感来自于扩散过程模型(Diffusion Models),这些模型在自然图像建模领域取得了巨大成功。 Stable Diffusion通过一系列的扩散步骤来生成图像。在每一步中,模型逐渐“扩散”图像,从含有较少信息的噪声开始,到包含更多细节的图像。

By Ne0inhk
GitHub Copilot 在 VS Code 上的终极中文指南:从安装到高阶玩法

GitHub Copilot 在 VS Code 上的终极中文指南:从安装到高阶玩法

GitHub Copilot 在 VS Code 上的终极中文指南:从安装到高阶玩法 前言 GitHub Copilot 作为 AI 编程助手,正在彻底改变开发者的编码体验。本文将针对中文开发者,深度解析如何在 VS Code 中高效使用 Copilot,涵盖基础设置、中文优化、核心功能详解,并提供多个实战场景配置模板。 一、安装与配置全流程 1. 完整安装步骤 1. 扩展安装 * 打开 VS Code → 点击左侧活动栏的 Extensions 图标(或按 Ctrl+Shift+X) * 搜索框输入 GitHub Copilot → 点击安装按钮 2. 账号授权 * 安装完成后右下角弹出通知 → 点击 Sign in

By Ne0inhk
虚拟世界的AI魔法:AIGC引领元宇宙创作革命

虚拟世界的AI魔法:AIGC引领元宇宙创作革命

云边有个稻草人-ZEEKLOG博客——个人主页 热门文章_云边有个稻草人的博客-ZEEKLOG博客——本篇文章所属专栏 ~ 欢迎订阅~ 目录 1. 引言 2. 元宇宙与虚拟世界概述 2.1 什么是元宇宙? 2.2 虚拟世界的构建 3. AIGC在元宇宙中的应用 3.1 AIGC生成虚拟世界环境 3.2 AIGC生成虚拟角色与NPC 3.3 AIGC创造虚拟物品与资产 4. AIGC在虚拟世界与元宇宙的技术实现 4.1 生成式对抗网络(GANs)在元宇宙中的应用 4.2 自然语言处理(NLP)与虚拟角色的对话生成 4.3 计算机视觉与物理引擎 5. 持续创新:AIGC与元宇宙的未来趋势 5.1 个人化与定制化体验 5.

By Ne0inhk