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

相关推荐
步行cgn4 小时前
Spring c 命名空间注入详解
java·后端·spring
明月_清风4 小时前
Maven 到底是什么?一篇文章搞懂 Java 项目构建与依赖管理
java·后端·maven
aramae4 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路5 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
荆棘鸟智能5 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
无敌贵点大王5 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
Wang's Blog6 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog6 小时前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
Logic1016 小时前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Ivanqhz6 小时前
SVD++算法
java·服务器·网络·深度学习·神经网络