极客算法

LeetCode-88.合并两个有序数组(Merge Sorted Array)

2020-11-18

88. 扰乱字符串

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

说明:

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

示例:

输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3

输出:[1,2,2,3,5,6]

  提示:

-10^9 <= nums1[i], nums2[i] <= 10^9
nums1.length == m + n
nums2.length == n

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/merge-sorted-array

Link:https://leetcode.com/problems/merge-sorted-array/

暴力破解

O(M)

正着排序会造成数组移动,那倒着来就可以了,依次把较大的放在后面

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.
        """
        
        cur = len(nums1) - 1
        i = m - 1
        j = n - 1
        
        while i >= 0 or j >= 0:
            val1 = nums1[i] if i >= 0 else float('-inf')
            val2 = nums2[j] if j >= 0 else float('-inf')
            
            if val1 >= val2:
                nums1[cur] = val1
                i -= 1
            else:
                nums1[cur] = val2
                j -= 1

            cur -= 1

再简化

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.
        """
        cur = m + n - 1
        i = m - 1
        j = n - 1
        
        while j >= 0:

            if i >= 0 and nums1[i] >= nums2[j]:
                nums1[cur] = nums1[i]
                i -= 1
            else:
                nums1[cur] = nums2[j]
                j -= 1

            cur -= 1

–End–


评论

内容:
其他: