Skip to content

Prepare For Coder Interview – Denny

  • Basic
  • Medium
  • Hard
  • Architect
  • Life

LeetCode: Merge Sorted Array

Posted on February 27, 2018July 26, 2020 by braindenny

Merge Sorted Array



Similar Problems:

  • CheatSheet: Leetcode For Code Interview
  • CheatSheet: Common Code Problems & Follow-ups
  • Tag: #array, #twopointer, #mergelist

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.

Github: code.dennyzhang.com

Credits To: leetcode.com

Leave me comments, if you have better ways to solve.


  • Solution: three pointers
## https://code.dennyzhang.com/merge-sorted-array
## Basic Ideas: two pointer
##
##  Merge two sorted array
##  From right to left, in order to do in-place change
##
## Complexity:
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.
        """
        i, j = m-1, n-1
        while i>=0 and j>=0:
            if nums1[i]>nums2[j]:
                # move nums1
                nums1[i+j+1] = nums1[i]
                i -= 1
            else:
                nums1[i+j+1] = nums2[j]
                j -= 1

        # move remaining items of nums2 to nums1
        if j>=0:
            nums1[:j+1] = nums2[:j+1]

  • Solution: three pointers
## https://code.dennyzhang.com/merge-sorted-array
## Basic Ideas:
##
##  Merge two sorted array
##  From right to left, in order to do in-place change
##
## Complexity:
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.
        """
        i, j, k = m-1, n-1, m+n-1
        while i>=0 and j>=0:
            if nums1[i]>nums2[j]:
                # move nums1
                nums1[k] = nums1[i]
                i -= 1
            else:
                nums1[k] = nums2[j]
                j -= 1
            k -= 1

        # move remaining items of nums2 to nums1
        if j>=0:
            nums1[:k+1] = nums2[:j+1]
// https://code.dennyzhang.com/merge-sorted-array
// Basic Ideas: array, 3 pointers, from right to left
// Complexity: Time O(n+m), Space O(1)
func merge(nums1 []int, m int, nums2 []int, n int)  {
    i, j, k := m-1, n-1, m+n-1
    for i>=0 && j>=0 {
        if nums1[i] > nums2[j] {
            nums1[k] = nums1[i]
            i--
        } else {
            nums1[k] = nums2[j]
            j--
        }
        k--
    }
    for ; j>=0; j-- {
        nums1[k] = nums2[j]
        k--
    }
}
linkedin
github
slack

Post Views: 6
Posted in BasicTagged #array, #twopointer, mergelist

Post navigation

LeetCode: Longest Common Prefix
LeetCode: Roman to Integer

Leave a Reply Cancel reply

Your email address will not be published.

Tags

#array #backtracking #bfs #binarytree #bitmanipulation #blog #classic #codetemplate #combination #dfs #dynamicprogramming #game #graph #greedy #heap #inspiring #interval #linkedlist #manydetails #math #palindrome #recursive #slidingwindow #stack #string #subarray #trie #twopointer #twosum binarysearch editdistance hashmap intervaldp knapsack monotone oodesign presum rectangle redo review rotatelist series sql treetraversal unionfind

Recent Posts

  • a
  • a
  • a
  • a
  • a

Recent Comments

    Archives

    Categories

    • Amusing
    • Basic
    • Easy
    • Hard
    • Life
    • Medium
    • Resource
    • Review
    • Series
    • Uncategorized
    Proudly powered by WordPress | Theme: petals by Aurorum.