【数据结构】顺序表专题

前言

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

💓 个人主页:小张同学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,感谢观看!!!!

相关推荐
楼田莉子33 分钟前
C++算法专题学习——分治
数据结构·c++·学习·算法·leetcode·排序算法
一支鱼1 小时前
leetcode常用解题方案总结
前端·算法·leetcode
ulias2121 小时前
各种背包问题简述
数据结构·c++·算法·动态规划
m0_570466411 小时前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
吃着火锅x唱着歌1 小时前
LeetCode 1537.最大得分
算法·leetcode·职场和发展
数模加油站1 小时前
25高教社杯数模国赛【C题超高质量思路+可运行代码】第十弹
算法·数学建模·数模国赛·高教社杯全国大学生数学建模竞赛
ulias2122 小时前
动态规划入门:从记忆化搜索到动态规划
算法·动态规划
山河君2 小时前
webrtc之语音活动上——VAD能量检测原理以及源码详解
算法·音视频·webrtc·信号处理
THMAIL2 小时前
深度学习从入门到精通 - LSTM与GRU深度剖析:破解长序列记忆遗忘困境
人工智能·python·深度学习·算法·机器学习·逻辑回归·lstm
JuneXcy2 小时前
结构体简介
c语言·数据结构·算法