【C语言】Leetcode 88.合并两个有序数组

news2025/1/17 21:39:47


一、代码实现

/**
 * 函数名称:merge
 * 
 * 功能描述:合并两个已排序的整数数组
 * 
 * 参数说明:
 *   nums1:第一个整数数组
 *   nums1Size:第一个数组的大小
 *   m:第一个数组中要合并的子数组的起始索引
 *   nums2:第二个整数数组
 *   nums2Size:第二个数组的大小
 *   n:第二个数组中要合并的子数组的起始索引
 */

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) 
{
    int end1 = m - 1;        // 定义第一个数组的结束索引
    int end2 = n - 1;        // 定义第二个数组的结束索引
    int end = m + n - 1;     // 定义合并后数组的结束索引

    while(end1 >= 0 && end2 >= 0) 
    {
        if(nums1[end1] > nums2[end2]) 
        { 
            // 如果第一个数组的当前元素大于第二个数组的当前元素
            nums1[end] = nums1[end1]; 
            // 将第一个数组的当前元素放到合并后数组的当前位置
            --end; 
            --end1; 
        }
        else
        {
            // 否则将第二个数组的当前元素放到合并后数组的当前位置
            nums1[end] = nums2[end2]; 
            --end2; 
            --end; 
        }
    }

    // 如果 end2 大于等于 0,说明 nums2 中还有剩余元素
    // 下面的循环用于将 nums2 中剩余的元素放到合并后数组的末尾
    while(end2 >= 0) 
    {
        nums1[end] = nums2[end2]; 
        --end; 
        --end2; 
    }
}

二、代码解释

  1. 首先,我们定义三个指针end1、end2和end,分别指向nums1、nums2和合并后数组的末尾。
  2. 使用while循环,当end1和end2均大于等于0时,比较nums1[end1]和nums2[end2]的大小,将较大的元素放入合并后数组的末尾,并依次向前移动指针end、end1或end2。
  3. 如果end2仍大于等于0,说明nums2中还有剩余元素未合并,继续将剩余元素放入合并后数组的末尾。
  4. 循环结束后,合并后的数组即存储在nums1中,且按非递减顺序排列

要注意的地方是在转移的最后剩余的是nums1还是nums2,因为是往nums1中添加,所以是nums1时不会产生影响。当剩余的是nums2时,由于添加的时候是按大的往进添加,而且nums1和nums2都是有序数组,所以剩余的nums2一定也是小于nums1的,按逻辑继续添加就可以正常实现。

以上是对合并两个有序数组的解题思路和代码解析。

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

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

相关文章

MyBatis Plus:自定义typeHandler类型处理器

目录 引言:关于TypeHandler PostGreSQL:JSON数据类型 PostGreSQL数据库驱动:PGobject类 TypeHandler类型处理器 自定义类型处理器 类型处理器实现:PGJsonTypeHandler 注册类型处理器 引言:关于TypeHandler MyBa…

普中51单片机学习(十四)

中断系统 中断的概念 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生),CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务),待CPU将事件B处理完毕后,再回到原来事件…

【C语言的小角落】逻辑与逻辑或混合计算

关注小庄 顿顿解馋(≧◡≦) 引言:本篇博客小庄带领小伙伴们解决一个比较角落有时头疼的问题—关于逻辑与和逻辑或结合运算的问题,请放心食用~ 我们先放代码说话 int main() {int x 1;int y 3;int z 4;if(x1 || y && z){;} printf("y …

【医学大模型】Text2MDT :从医学指南中,构建医学决策树

Text2MDT :从医学指南中,构建医学决策树 提出背景Text2MDT 逻辑Text2MDT 实现框架管道化框架端到端框架 效果 提出背景 论文:https://arxiv.org/pdf/2401.02034.pdf 代码:https://github.com/michael-wzhu/text2dt 假设我们有一…

使用Sora部署实时音视频通信应用实战项目

一、项目概述 本项目将构建一个在线教学平台,实现教师与学生之间的实时音视频通信。平台将提供教师上传课件、发起授课邀请,学生加入课堂、实时互动等功能。通过使用Sora,我们将确保音视频通信的稳定、流畅和低延迟。 目录 一、项目概述 二…

并发编程线程安全之同步锁Synchronized

一、原子性定义 原子性的本质是互斥访问,同一时刻只有一个线程对它进行访问操作 二、原子性问题的简述 public class AutomicDemo {int count 0;public static void main(String[] args) throws InterruptedException {AutomicDemo automicDemo new AutomicDem…

洛谷C++简单题小练习day15—计算阶乘小程序(不用循环)

day15--计算阶乘小程序--2.19 习题概述 题目描述 求 n!,也就是 123⋯n。 挑战:尝试不使用循环语句(for、while)完成这个任务。 输入格式 第一行输入一个正整数 n。 输出格式 输出一个正整数,表示 n! 代码部分 …

MySQL数据库基础(十一):多表查询

文章目录 多表查询 一、交叉连接(了解) 二、内连接 1、连接查询的介绍 2、内连接查询 3、小结 三、左外连接 1、左连接查询 2、小结 四、右外连接 1、右连接查询 2、小结 多表查询 一、交叉连接(了解) 它是所有连接…

Elasticsearch:将 IT 智能和业务 KPI 与 AI 连接起来 - 房间里的大象

作者:Fermi Fang 大象寓言的智慧 在信息技术和商业领导力的交叉点,蒙眼人和大象的古老寓言提供了一个富有洞察力的类比。 这个故事起源于印度次大陆,讲述了六个蒙住眼睛的人第一次遇到大象的故事。 每个人触摸大象的不同部位 —— 侧面、象牙…

Leetcode日记 226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

Leetcode日记 226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 二叉树简介二叉树分类解题方法制作不易,感谢三连,谢谢啦 二叉树简介 二叉树(Binary Tree)是一种特殊的树形…

UE蓝图 分支(Branch)节点和源码

系列文章目录 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 文章目录 系列文章目录一、分支节点功能二、分支节点用法三、分支节点使用场景四、分支节点实现过程五、分支节点相关源码 一、分支节点功能 在Unreal Engine(UE)的蓝图中&#xff0…

leetcode1049:最后一块石头的重量二

解题思路: 把石头堆分割成差不多的两堆,使得两堆差值最小 dp数组的含义: dp[j]:背包容量为j的背包最大重量(价值)为dp[j] dp[j] max(dp[j],dp[j-stones[i]] stones[i]) 初始化:(dp数组的大小根据题目进行定义&a…

华为配置旁挂二层组网隧道转发示例

配置旁挂二层组网隧道转发示例 组网图形 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户通过WLAN接入网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时,不影响用户的业务使用。 组网需求 AC组…

【总结】linux命令行在个人用户下添加环境变量

一,简介 在工作过程中需要将对应的路径添加到个人用户的环境变量中,本文介绍如何添加,供参考。 二,操作步骤 非常简单,只需要找到对应配置文件,将路径添加进去即可。 2.1 找到配置文件 一般为用户名下…

【无标题】力扣报错:member access within null pointer of type ‘struct ListNode‘

项目场景: 做单链表反转题目,报错:member access within null pointer of type ‘struct ListNode’ 题目链接:LINK 问题描述 我明明在初始化指针时候,已经处理了n2->next情况却依然报错 这个报错提示含义是:大概就…

react封装通用Modal弹窗组件

目录 1、【src/component/modal/hoc.js】 2、【src/component/modal/componentModal.js】 3、【src/page/projectView.js】 【说明】:后台管理的项目中会经常遇到弹窗,于是封装了一个简单的公共弹窗组件 这个公共组件不适用复杂的功能,简单的…

力扣题目训练(17)

2024年2月10日力扣题目训练 2024年2月10日力扣题目训练551. 学生出勤记录 I557. 反转字符串中的单词 III559. N 叉树的最大深度241. 为运算表达式设计优先级260. 只出现一次的数字 III126. 单词接龙 II 2024年2月10日力扣题目训练 2024年2月10日第十七天编程训练,今…

第五次作业(防御安全)

需求: 1.办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP 不能用来转换) 2.分公司设备可以通过总公司的移动链路和电信链路访问到DMZ区的http服务器 3.分公司内部的客户端可以通过公网地址访问到内部的服务…

力扣OJ题——相交链表

题目:160. 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 思路一(暴力求解): A链表的每个节点依次跟B链表中节点进行…

xshell 修改时间破解使用

文章目录 xshell 修改时间破解使用:question: 问题:point_right: 解决方案: xshell 修改时间破解使用 参考地址:博客地址 ❓ 问题 问题 ​ 当前 xshell 官方提供免费的个人版本供使用,但是在官网升级新版本后则需要进行升级之后才能使用&…