【Leetcode】88. Merge Sorted Array

本文介绍了一种将两个有序数组合并到第一个数组中的方法。通过从后向前遍历的方式,确保了原始数组的数据不会被覆盖,并实现了高效地合并操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【Leetcode】Merge Sorted Array

@(Leetcode)
题目链接:
https://leetcode.com/problems/merge-sorted-array/description/

思路:
将数组nums2归并进nums1里面,两个数组都是排好序的,有点归并排序的意思。设置3个index,index为结果、idx_1为nums1的,idx_2为nums2的。这题主要注意三个点:
1. 因为要把结果放到原来的数组num1里面,避免num1里面的元素被覆盖,所以index从后往前遍历。
2. 遍历的时候,idx_1或者idx_2小于0停止,另外一个idx不为0的要继续遍历。也就是说先遍历2个nums,然后遍历剩下的一个nums。
3. m= 0, n= 0情况的处理。

我的AC代码:

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        if (m== 0) {
            for (int i= 0; i< n; i++) {
                nums1[i]= nums2[i];
            }
            return;
        }
        if (n== 0) return;

        int idx_1= m- 1;
        int idx_2= n- 1;
        int index= m+ n- 1;
        while (idx_1>= 0&& idx_2>= 0) {
            if (nums1[idx_1]> nums2[idx_2]) {
                nums1[index]= nums1[idx_1];
                idx_1--;
            } else {
                nums1[index]= nums2[idx_2];
                idx_2--;
            }
            index--;
        }
        if (idx_1< 0) {
            for (int i= index; i>= 0; i--) {
                nums1[i]= nums2[idx_2];
                idx_2--;
            }
        } else if (idx_2< 0) {
            for (int i= index; i>= 0; i--) {
                nums1[i]= nums1[idx_1];
                idx_1--;
            }
        }
        return;
    }
};

PS:感觉自己写的还是太繁琐,应该会有更加简单优美的写法,希望能好好学习下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值