C语言刷题--合并有序数组

cpp 复制代码
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
        // 定义三个指针,逻辑和之前一致
    int p1 = m - 1;    // nums1有效元素末尾
    int p2 = n - 1;    // nums2有效元素末尾
    int p = m + n - 1; // nums1合并后的填充位置末尾

    // 从后往前比较,填充较大值
    while (p1 >= 0 && p2 >= 0) {
        if (nums1[p1] >= nums2[p2]) {
            nums1[p] = nums1[p1];
            p1--;
        } else {
            nums1[p] = nums2[p2];
            p2--;
        }
        p--;
    }

    // 处理nums2剩余元素(nums1先遍历完的情况)
    while (p2 >= 0) {
        nums1[p] = nums2[p2];
        p2--;
        p--;
    }
}

该代码实现了两个有序数组合并的功能。

算法使用三指针法,从数组末尾开始比较和填充,将较大的元素依次放入nums1的末尾。

当nums1的元素先比较完时,直接将nums2剩余元素复制到nums1前端。

这种方法无需额外空间,时间复杂度为O(m+n),是合并有序数组的高效解决方案。

相关推荐
紧跟先前的步伐11 分钟前
Go AI Agent 实战 03|Token、上下文窗口与模型调用成本
java·人工智能·golang
高晶31 分钟前
无乘法器实现LC二阶滤波器:基于移位运算的快速算法与四种精度推导
算法·设计模式·程序员
ysbfsy34 分钟前
大数计算思路
算法
const_qiu37 分钟前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog42 分钟前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
高晶44 分钟前
主从自动分配算法:平均值乘以设备数一半的选举基准值解析
算法·设计模式·程序员
Promising_GEO1 小时前
GEE实战02期:从卫星波段开始:利用 Sentinel-2 自己计算 NDVI
java·sentinel·遥感·空间分析
大文说跨境1 小时前
亚马逊多账号管理浏览器怎么选?云登/紫鸟/AdsPower 对比
java·前端·自动化
CoderYanger1 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
学电子她就能回来吗1 小时前
LeetCode Hot 100|普通数组专题学习笔记(零基础版)
笔记·算法·leetcode