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

相关推荐
地平线开发者7 小时前
J6B vio scenario sample
算法
Flittly14 小时前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
小兔崽子去哪了14 小时前
Java 生成二维码解决方案
java·后端
BothSavage19 小时前
Trae远程开发中DeepSeek自定义模型4054错误的排查与修复
算法
小林ixn19 小时前
从暴力到KMP:一道题彻底搞懂字符串匹配的前世今生
算法
人活一口气19 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
烬羽20 小时前
字符串算法入门:从反转字符串到回文判断,面试不再慌
算法·面试
NE_STOP21 小时前
Vibe Coding -- 完整项目案例实操
java
荣码21 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python