【刷题篇】顺序表

news/2024/11/24 2:22:19/

1.前言

        在之前,我们学习了顺序表的概念与实现,其基本概念如下:

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,是线性表中的一种,分为静态顺序表和动态顺序表。一般情况下采用数组存储,支持元素的随机访问。在数组上完成数据的增删查改

        而本期,我们将通过两道在线OJ题来巩固顺序表的基础知识,这两道题分别来自LeetCode 27移除元素LeetCode 88合并两个有序数组

2.移除元素

        1.题目


         2.初步分析

        第一眼我们的想法可能是再开辟一个新数组,然后遍历原数组,把不等于val的数值放入新数组中即可完成移除。过程如下:

 但是这样的空间复杂度为O(N),不符合题目的要求,题目要求我们原地移除元素

        我的思路是:将数组中不等于val的值移到数组前面。定义两个变量left和right用来表示数组的下标,right向后遍历数组,当nums[right]不为val时,则将nums[right]赋值给nums[left],然后left++、right++,否则right++,循环直到right等于数组长度。其空间复杂度为O(1)。动图过程如下:

我们发现,最后left前的元素即为我们需要的数组元素,且left即为移除后元素个数 

         3.代码实现

//接口型OJ
int removeElement(int* nums, int numsSize, int val)
{int right = 0;int left = 0;for (right = 0; right < numsSize; right++) //右指针遍历一遍数组{if (nums[right] != val)  //不为val就往前放{nums[left] = nums[right];left++; //左指针右移}}return left; //left即为移除后所需元素个数}

3合并两个有序数组

        1.题目

        2.初步分析

        本题的目的是将两个有序数组从小到大归并到一个数组中。我们依旧可以遍历两个数组的元素进行对比,将满足条件的元素放入归并后数组中。但是由于题目要求将nums1和nums2数组归并到nums1中,所以我们不能从左往右遍历两个数组,将小的放入nums1中,否则会出现以下情况:

显然,这样做显然会造成nums1的数据丢失,导致出错。 

        我的思路是:我们可以发现,由于nums1的数组空间是m+n,所以后面n个空间是空的。我们可以利用这个特点,从右往左反向遍历数组,将元素进行比较,较大者放于数组后面,从后往前放,如下:


这个算法需要注意的是:循环的结束条件是end1和end2其中一个小于0 ,当end2先小于零时,说明我们已经按照顺序将num2数组的元素全部归入num1了,就无需再做处理。但当num1先小于零时,此时nums2数组的数据并未全部归并到nums1中,我们还需将nums2剩余元素放入nums1中。此算法的时间复杂度为O(M+N)

         3.AC代码实现

//接口型OJ
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) 
{int end1 = m - 1;int end2 = n - 1;int end = nums1Size - 1;while (end1 >= 0 && end2 >= 0) //双指针,从后往前找最大元素{//将最大元素放入nums1数组后面if (nums1[end1] > nums2[end2]){nums1[end] = nums1[end1]; end1--;end--;}else{nums1[end] = nums2[end2];end2--;end--;}}while (end2 >= 0) //如果nums1先遍历结束,需要将nums2剩余数据放入nums1{nums1[end] = nums2[end2];end2--;end--;}}

以上,就是顺序表刷题的全部内容。

制作不易,能否点个赞再走呢qwq


http://www.ppmy.cn/news/22903.html

相关文章

力扣19.删除链表的倒数第N个结点(C++)

目录 1.题目描述 2.代码 1.题目描述 19.删除链表的倒数第N个结点 【中等】 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#…

从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类

目录 专题一&#xff1a;深度卷积网络知识详解 专题二&#xff1a;PyTorch应用与实践&#xff08;遥感图像场景分类&#xff09; 专题三&#xff1a;卷积神经网络实践与目标检测 专题四&#xff1a;卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】 专题五&#xff…

Flowable监听器

文章目录一、执行监听器1、可以监听的节点2、添加事件监听器配置3、具体实现二、任务监听器1、可以监听的节点2、添加任务监听器配置3、具体实现一、执行监听器 1、可以监听的节点 开始、结束节点连线节点节点的开始和结束网关的开始和结束中间事件的开始和结束开始时间结束或…

做软件测试如何突破月薪20K?熬夜7天整理出这一份3000字超全学习指南...

IT行业从事技术岗位&#xff0c;尤其对于测试来说&#xff0c;月薪20K&#xff0c;即便在北上广深这类一线城市薪水也不算低了&#xff0c;可以说对于大部分测试岗位从业者来说&#xff0c;20K都是一个坎儿。 那么&#xff0c;问题来了&#xff0c;做软件测试如何可以达到月薪2…

全国青少年编程等级考试scratch四级真题2022年12月(含题库答题软件账号)

对青少年编程等级考试scratch真题答题考试系统关注的请点击**电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手1.运行下列程序&#xff0c;量“结果”的值为&#xff1f;&#xff08; &…

DP优化 - 四边形不等式优化

若对于 i≤i′≤j≤j′i\leq i\leq j \leq ji≤i′≤j≤j′&#xff0c;二维数组 aaa 满足如下性质&#xff1a; ai,jai′,j′≤ai,j′ai′,ja_{i,j} a_{i,j} \leq a_{i,j} a_{i, j}ai,j​ai′,j′​≤ai,j′​ai′,j​ 则称数组 aaa 满足四边形不等式。 若对于 i≤i′≤j≤…

故障排查:ArcGIS Data Store升级失败(Attempt to configure data store failed)

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录故障详情问题原因解决办法总结故障详情 最近有同事反馈&#xff0c;他…

软件测试最重要的事之编写用例

软件测试用例得出软件测试用例的内容&#xff0c;其次&#xff0c;按照软件测试写作方法&#xff0c;落实到文档中&#xff0c;两者是形式和内容的关系&#xff0c;好的测试用例不仅方便自己和别人查看&#xff0c;而且能帮助设计的时候考虑的更周。 一个好的测试用例必须包含…