【数据结构】顺序表专题

embedded/2024/10/19 7:32:00/

前言

本篇文章我们来进行有关顺序表的专题训练,让我们一起来看一下有关顺序表的算法

💓 个人主页:小张同学zkf

⏩ 文章专栏:数据结构

📝若有问题 评论区见

🎉欢迎大家点赞👍收藏⭐文章

 1.移除元素

这道题看似简单,但我们不要忘了其中有个条件限制,空间复杂度O(1),所以做这道题时,我们不能创一个新的空间,否则空间复杂度过大与题不符。

所以我们最容易想到的第一种解法,创建新的数组,遍历原数组的思路就不行了

既然不能创建新的空间,那我们就只能在原数组内更改,这里我们有第二种思路,双指针法,创建两个指针,两个指针刚开始同时指向这个数组的首元素,一个指针用来在顺序表上遍历,若与要删除目标相等则继续往后遍历,若与要删除目标不相等,则将现在所指向的值直接赋值与另一个指针指向处,然后俩指针同时向后走,重复这个过程直到指向空,最后那个没指向空的指针就是要返回的长度

 

 

代码如下

 

有些人在这可能有些疑惑,说指针也没用指针呀,其实数组的下标性访问,就是指针访问嘛,一个思路嘛。 


2. 合并两个有序数组

第一种思路我们很容易想到的直接冒泡排序,但这个效率太低了,时间复杂度高

我们第二种思路三指针法,需要用到三个指针,l1指向下标为m处,l3指向下表为n+m-1处,l2指向第二个数组的最后一个元素处。然后l1和l2比较谁大放l3处,小的那个指针与l3向前移,重复这个过程直到l1都指向初始位置,或l2指向初始位置。

这里或许有人疑问了为什么是从后往前比较,而不是从前往后比较,我们仔细想一下若从前往后比较我们很有可能把原值覆盖,但从后往前比较就不会出现覆盖情况

这里结果就有两种情况,若l2先出循环正好有序,而且l2和l1已完全合并成一个数组,但若l1先出循环,l2还有数据没放到l1中,这里直接让l2剩余部分直接尾插到l1中就行了。 

 

代码如下: 

 


结束语 

本篇博客列举了两道有关顺序表的算法题,算是两道经典题了,若有什么问题,可以在评论区交流,下片博客我们继续对链表专题进行补充

OK,感谢观看!!!!


http://www.ppmy.cn/embedded/25463.html

相关文章

修改后门ctime | Linux 后门系列

0x00 前情提要 在 alias 后门 | Linux 后门系列一文中,我们为了让后门完美一些,修改了后门文件的 atime、mtime,但是 ctime 一直没有办法修改,今天我们来把这一块补齐,让后门更加完美 atime -> access t…

golang反射

go反射 反射基本介绍应用场景基本使用结构体注意练习最佳实践遍历结构体的方法,调用接头体的方法,获取结构体的标签 反射 基本介绍 反射可以在运行时动态获取变量的各种信息,比如变量的类型(type)、类别(kind)如果是结构体变量,…

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http板块) 一、思路图二、Util板块1、Splite板块(分词)(1)代码(2)测试及测试结果i、第一种测试ii、第二种…

43. UE5 RPG 实现敌人血量显示条

在上一篇文章中,我们实现了火球术伤害功能,在火球击中敌方目标,可以降低敌人20的血量,这个值现在是固定的,后面我们会修改火球的伤害设置。接着,我们也测试了功能是实现的,但是在正常的游玩过程…

MATLAB初学者入门(25)—— LQR控制器优化设计

LQR(线性二次调节器)控制器是一种常用的最优控制策略,用于设计系统的状态反馈控制器以最小化性能指标,通常是所有状态的加权平方和与控制输入的加权平方和。在MATLAB中,使用LQR控制器通常涉及定义系统模型、选择适当的…

[Meachines][Hard]FormulaX

Main $ nmap -sC -sV 10.10.11.6 --min-rate 1000 # echo 10.10.11.6 formula.htb>>/etc/hosts 创建一个新用户,登录 来到聊天窗口,发现普通用户无法使用 来到联系页面,测试跨站 {"first_name":"<img srchttp://10.10.16.6/s-h4ck13/>",&qu…

鸿蒙开发接口Ability框架:【@ohos.ability.wantConstant (wantConstant)】

wantConstant wantConstant模块提供want中action和entity的权限列表的能力&#xff0c;包括系统公共事件宏&#xff0c;系统公共事件名称等。 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导…

Vue2与Vue3:深度剖析核心差异与升级亮点

核心差异与升级亮点 随着Vue.js框架的不断演进&#xff0c;Vue2与Vue3作为两个重要版本&#xff0c;各自承载了特定时期的前端开发理念和技术实践。本文将全面探讨Vue2与Vue3之间的核心区别&#xff0c;旨在帮助开发者理解两者在设计思路、性能优化、API结构、生命周期管理等方…