Skip to content

Latest commit

 

History

History
157 lines (116 loc) · 3.95 KB

88.Merge_Sorted_Array.md

File metadata and controls

157 lines (116 loc) · 3.95 KB
  1. Merge Sorted Array 难度 简单

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

You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively.

Merge nums1 and nums2 into a single array sorted in non-decreasing order.

The final sorted array should not be returned by the function, but instead be stored inside the array nums1. To accommodate this, nums1 has a length of m + n, where the first m elements denote the elements that should be merged, and the last n elements are set to 0 and should be ignored. nums2 has a length of n.

Example 1:

Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
Explanation: The arrays we are merging are [1,2,3] and [2,5,6].
The result of the merge is [1,2,2,3,5,6] with the underlined elements coming from nums1.

Example 2:

Input: nums1 = [1], m = 1, nums2 = [], n = 0
Output: [1]
Explanation: The arrays we are merging are [1] and [].
The result of the merge is [1].

Example 3:

Input: nums1 = [0], m = 0, nums2 = [1], n = 1
Output: [1]
Explanation: The arrays we are merging are [] and [1].
The result of the merge is [1].
Note that because m = 0, there are no elements in nums1. The 0 is only there to ensure the merge result can fit in nums1.
 

Constraints:

nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[j] <= 109

Follow up: Can you come up with an algorithm that runs in O(m + n) time?

相关企业

Facebook|66

亚马逊 Amazon|9

字节跳动|8

微软 Microsoft|6

小米集团|5

相关标签

  • Array
  • Two Pointers
  • Sorting

相似题目

  • Merge Two Sorted Lists 简单
  • Squares of a Sorted Array 简单
  • Interval List Intersections 中等

隐藏提示1 You can easily solve this problem if you simply think about two elements at a time rather than two arrays. We know that each of the individual arrays is sorted. What we don't know is how they will intertwine. Can we take a local decision and arrive at an optimal solution?

显示提示2 If you simply consider one element each at a time from the two arrays and make a decision and proceed accordingly, you will arrive at the optimal solution.

first try

# time O(n)
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.
        """

        n1copy = list(nums1[:m])

        n1copy_i = 0
        n2_i = 0
        n1_i = 0
        while n1copy_i < m and n2_i < n and n1_i < m+n:
            if n1copy[n1copy_i] <= nums2[n2_i]:
                nums1[n1_i] = n1copy[n1copy_i]
                n1copy_i += 1
            else:
                nums1[n1_i] = nums2[n2_i]
                n2_i += 1
            n1_i += 1
        while n1copy_i >= m and n2_i < n and n1_i < m+n:
            nums1[n1_i] = nums2[n2_i]
            n2_i += 1
            n1_i += 1
        while n2_i >= n and n1copy_i < m and n1_i < m+n:
            nums1[n1_i] = n1copy[n1copy_i]
            n1copy_i += 1
            n1_i += 1

similar

# time O(n)
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.
        """

        if nums1 is None or nums2 is None:
            return 
        
        i, j = 0, 0
        array = []

        while i < m and j < n:
            if nums1[i] <= nums2[j]:
                array.append(nums1[i])
                i += 1
            else:
                array.append(nums2[j])
                j += 1
        
        while i < m:
            array.append(nums1[i])
            i += 1
        while j < n:
            array.append(nums2[j])
            j += 1
        
        for index in range(m + n):
            nums1[index] = array[index]

        return 

worse, O(nlogn)

    C = A+B 
    C.sort()
    return C