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),是合并有序数组的高效解决方案。

相关推荐
日月云棠1 天前
各版本JDK对比:JDK 25 特性详解
java
爱理财的程序媛1 天前
openclaw 盯盘实践
算法
用户8307196840821 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide1 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
IT探险家1 天前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java
花花无缺1 天前
搞懂new 关键字(构造函数)和 .builder() 模式(建造者模式)创建对象
java
用户908324602731 天前
Spring Boot + MyBatis-Plus 多租户实战:从数据隔离到权限控制的完整方案
java·后端
桦说编程1 天前
实战分析 ConcurrentHashMap.computeIfAbsent 的锁冲突问题
java·后端·性能优化
MobotStone1 天前
Google发布Nano Banana 2:更快更便宜,图片生成能力全面升级
算法
程序员清风1 天前
用了三年AI,我总结出高效使用AI的3个习惯!
java·后端·面试