手撕C语言题典——合并两个有序数组(顺序表)

搭配食用更佳哦~~

数据结构之顺顺顺——顺序表-CSDN博客

数据结构之顺序表的基本操作-CSDN博客

继续来做一下关于顺序表的经典算法题叭~

前言 

88. 合并两个有序数组 - 力扣(LeetCode)

       合并数组也是力扣上关于顺序表的一道简单题,继续来加深一下对顺序表的理解,当然大家也可以先去力扣上自己 try 一下~

一.思路

我们依旧先来看看题目讲的是啥 ,创建两个数组 nums1,nums2,注意题干中写出了:nums1 应该包含有 nums2 数组元素的空间,于是我们得到了下面两个数组:

 

我们需要把 nums2 合并到 nums1 中,并以非递减顺序排列,说人话就是递增顺序排序。

1)排序算法

       通过题干我们不难想到冒泡排序,让无序数组变成有序。于是这个思路就理清了,我们直接将 nums2 中的数据放入 nums1 中,再对 nums1 用排序算法进行排序。

       在此之前我们只学了冒泡排序,需要用到 for 循环的嵌套,但需要注意的是借助效率低下的排序算法会导致整体运行效率降低,但我们可以借助其他效率高的排序算法来做,因为今天的题主要是针对顺序表,所以这个思路就不展开。 

2)双指针

       我们还是定义两个变量 src1,src2,分别去遍历两个数组,并对数据进行比较,当 src1>src2 遍历的数据时,将 src2 遍历的数据存入数组 nums1 中,但此时我们会发现一个问题,当我们把数据存入数组1的时候,数组1此时的数据会被传入的数据覆盖。

此时 nums1 中的数据被覆盖

       我们发现从前往后遍历比较数据会有数据被覆盖的情况出现,所以这种方法不可取了。于是我们反过来,既然从头开始不行,那我们就从后往前遍历比较数据来看看,此时注意,比较大小时,谁大谁放在后面。此时我们需要添加一个变量 src3 来遍历 nums1 中没有数据的数组空间,src1 遍历存在有数据的最后一位。

      我们依旧比对 src1 和 src2,src2 > src1,我们就将此时 src1 的数据给给我们的 src3,然后src2 - -,src3 - -,依次遍历:

       当 src2 遍历到 2 的时候,src1> src2 ,我们就将 src1 指向的数据传给 src3 ,src1 - -,src3 - -,依次遍历,最终得到如下:

     再次进行 src2--,src3-- 此时 src2 跳出循环,循环终止我们就完成了两个数组的遍历,并把 nums2 合并到了 nums1 中且以非递减顺序排列。 

     当然我们要考虑所有情况,比如 src2 未遍历完,src1便已经跳出循环,此时不能跳出循环,而要继续去比较 src2 和 src3 的大小并排序:

        当继续比较遍历之后,src3- -,src2- - 跳出循环后,就可以终止循环了。

二.代码实现

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int 11 = m - 1;int 12 = n - 1;int 13 = m + n - 1;while (11 >= 0 && 12 >= 0)//只要一个条件为假就跳出循环{if(nums1[11] < nums2[12]) {nums1[13--] = nums2[12--];}else {nums1[13--] = nums1[11--];}}//除了循环有两种情况:11 >= 0 或者 12 >= 0//只需要处理一种情况:12 >= 0(12中的数据还没遍历完)while (12 >= 0){nums1[13--] = nums2[12--];}//此时num1中包含了nums2中的数据,nums1是升序数组
}

      至此,顺序表相关的两道题就更完啦~~       

    🎈🎈完结撒花🎈🎈  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/5606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YARN详解

YARN 简介 YARN 是Yet Another Resource Negotiator的缩写。 YARN是第二代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的;通俗讲就是资源管理器. YARN核心思想: 将 MR1 中资源管理和作业调度两个功能分…

数据结构:实验六:图的操作

一、 实验目的 &#xff08;1&#xff09;掌握图的邻接矩阵和邻接表存储结构。 &#xff08;2&#xff09;熟练图的邻接表的基本运算。 &#xff08;3&#xff09;加深图的深度优先遍历算法和广度优先遍历算法的理解 二、 实验要求 有下图所示的带权有向图及其对应的邻…

【工程记录】Python爬虫入门记录(Requests BeautifulSoup)

目录 写在前面1. 环境配置2. 获取网页数据3. 解析网页数据4. 提取所需数据4.1 简单提取4.2 多级索引提取 5. 常见问题 写在前面 仅作个人学习与记录用。主要整理使用Requests和BeautifulSoup库的简单爬虫方法。在进行数据爬取时&#xff0c;请确保遵守相关法律法规和网站的服务…

Ubuntu安装Neo4j

Ubuntu&#xff08;在线版&#xff09; 更新软件源 sudo apt-get update 添加Neo4j官方存储库 wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add - 将地址添加到系统的软件包源列表中 echo deb https://debian.neo4j.com stable latest | su…

二分图--判定以及最大匹配

水了个圈钱杯省一&#xff0c;不过估计国赛也拿不了奖&#xff0c;但还是小小挣扎一下。 什么是二分图&#xff1a;G(V,E)是一个无向图&#xff0c;若顶点V可以分为两个互不相交的子集A,B&#xff0c;并图中的每一条边&#xff08;i,j)所关联的ij属于不同的顶点集&#xff0c;…

Java image-processing 包依赖错误

错误的信息为&#xff1a; [ERROR] Failed to execute goal on project image-processing: Could not resolve dependencies for project com.ossez:image-processing:jar:0.0.2-SNAPSHOT: Failed to collect dependencies at org.openimaj:core-image:jar:1.3.10 -> org.op…

spring-boot示例

spring-boot版本&#xff1a;2.0.3.RELEASE 数据库: H2数据库 &#xff08;嵌入式内存性数据库&#xff0c;安装简单&#xff0c;方便用于开发、测试&#xff0c;不适合用于生产&#xff09; mybatis-plus框架&#xff0c;非常迅速开发CRUD

SpringMVC整体工作流程

. 用户发起一个请求&#xff0c;请求首先到达前端控制器前端控制器接收到请求后会调用处理器映射器&#xff0c;由此得知&#xff0c;这个请求该由哪一个Controller来进行处理(并未调用Controller)&#xff1b;前端控制器调用处理器适配器&#xff0c;告诉处理器适配器应该要…

Macos安装OrbStack

什么是OrbStack OrbStack 是一种在 macOS 上运行容器和 Linux 机器的快速、轻便和简单方法。它是 Docker Desktop 和 WSL 的超强替代品&#xff0c;所有这些都在一个易于使用的应用程序中。 在Macos M系列芯片上&#xff0c;经常遇到docker镜像不兼容的问题&#xff0c;此时使…

ubuntu的镜像源+bionic版本

首先第一步 查找和你自己ubuntu版本匹配的版本号 匹配代号如下 在终端输入lsb_release -a查看自己系统上的版本号 可以看到我这个版本号的代号是bionic。 每个版本的镜像文件都是有规律的。 bionic版本的源如下 # 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic ma…

Linux内核之页面映射到虚拟地址:insert_page用法实例(六十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

vscode连接阿里云 无法连接

如果是首次连接&#xff0c;需要在阿里云控制台下 点击重置密码 同时注意在重置密码页面最下方&#xff0c;有开启密码登录选项

Nginx实现端口转发与负载均衡配置

前言&#xff1a;当我们的软件体系结构较为庞大的时候&#xff0c;访问量往往是巨大的&#xff0c;所以我们这里可以使用nginx的均衡负载 一、配置nginx实现端口转发 本地tomcat服务端口为8082 本地nginx端口为8080 目的&#xff1a;将nginx的8080转发到tomcat的8082端口上…

SOLIDWORKS DRAFTSIGHT 2024新功能Top10

SOLIDWORKS 2024 以更加强大的姿态亮相&#xff0c;帮助您重塑设计。为了助力您简化和加快由概念到成品的产品开发流程&#xff0c;SOLIDWORKS 2024 涵盖全新以用户为中心的增强功能&#xff0c;致力帮您实现更智能、更快速地与您的团队和外部合作伙伴协同工作&#xff0c;下面…

C语言 循环语句 (1) 讲述循环概念演示while语句

接下来 我们来说 循环控制结构 循环的基本原理及循环语句 再说原理之前 我们 先来看几个案例 要求是 让用户在键盘中输入三个整数 然后将这些整数求和 这个用我们之前的知识就能轻松搞定 #define _CRT_SECURE_NO_WARNINGS//禁用安全函数警告 #pragma warning(disable:6031)…

MyBatis(XML映射器操作)

文章目录 XML映射器操作&#xff08;XxxMapper.xml&#xff09;文件目录1.基本介绍1.优点2.常用顶级元素 2.环境配置1.在原来的父模块下创建一个子模块2.删除没用的两个文件夹3.创建基本目录4.父模块的pom.xml5.jdbc.properties6.mybatis-config.xml7.测试使用MonsterMapperTes…

FSNotes for Mac v6.7.1中文激活:轻量级笔记管理工具

FSNotes for Mac&#xff0c;一款专为Mac用户打造的轻量级笔记管理工具&#xff0c;让您的笔记管理变得简单而高效。 FSNotes for Mac v6.7.1中文激活版下载 它采用Markdown文件格式&#xff0c;让您轻松创建和编辑富文本笔记&#xff0c;无需担心格式问题。同时&#xff0c;FS…

C++ | Leetcode C++题解之第59题螺旋矩阵II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> generateMatrix(int n) {int num 1;vector<vector<int>> matrix(n, vector<int>(n));int left 0, right n - 1, top 0, bottom n - 1;while (left < r…

十一、大模型-Semantic Kernel与 LangChain 的对比

Semantic Kernel 与 LangChain 的对比 Semantic Kernel 和 LangChain 都是用于开发基于大型语言模型&#xff08;LLM&#xff09;的应用程序的框架&#xff0c;但它们各有特点和优势。 基本概念和目标 Semantic Kernel 是一个由微软开发的轻量级 SDK&#xff0c;旨在帮助开发…

STM32标准库控制一盏LED闪烁

实物连接&#xff1a; ## 软件编程&#xff1a;默认已经有一个工程模板&#xff0c;代码实现逻辑&#xff1a; 1、使用RCC开启GPIO的时钟&#xff1b; 2、使用GPIO初始化函数实现初始化GPIO 3、使用输入或输出的函数控制GPIO口 #include "stm32f10x.h" …