LeetCode - 解题笔记 - 88 - Merge Sorted Array

这篇博客介绍了两种不同的归并排序实现,一种是C++的解决方案,另一种是其Python等价实现。这两种方法都避免了使用链表,并且在原数组上进行归并操作,确保了空间复杂度为O(1)。算法通过从后往前比较和填充数组元素,实现了两个已排序数组的合并。
摘要由CSDN通过智能技术生成

Solution 1

一个没有使用链表的归并排序,有一点点不同的是,由于使用的是vector并要求原位归并,所以从后往前可以保证不会出大问题。

  • 时间复杂度: O ( m + n ) O(m+n) O(m+n),其中 m m m n n n为两个数组的非空长度(也就是给定的nums1的长度)
  • 空间复杂度: O ( 1 ) O(1) O(1),原位归并,仅维护常数个状态量
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int pos1 = m - 1, pos2 = n - 1, pos = m + n - 1;
        while (pos1 >= 0 && pos2 >= 0) {
            nums1[pos--] = nums1[pos1] > nums2[pos2] ? nums1[pos1--]: nums2[pos2--];
        }
        // 可能有剩下的
        while (pos1 >= 0) {
            nums1[pos--] = nums1[pos1--];
        } 
        while (pos2 >= 0) {
            nums1[pos--] = nums2[pos2--];
        } 
    }
};

Solution 2

Solution 1的Python实现

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        pos1, pos2 = m - 1, n - 1
        pos = m + n - 1
        
        while pos1 >= 0 and pos2 >= 0:
            if nums1[pos1] > nums2[pos2]:
                nums1[pos] = nums1[pos1]
                pos1 -= 1
            else:
                nums1[pos] = nums2[pos2]
                pos2 -= 1
                
            pos -= 1
                
        while pos1 >= 0:
            nums1[pos] = nums1[pos1]
            pos -= 1
            pos1 -= 1
            
        while pos2 >= 0:
            nums1[pos] = nums2[pos2]
            pos -= 1
            pos2 -= 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值