https://leetcode.com/problems/merge-sorted-array/submissions/1497639536/?envType=study-plan-v2&envId=top-interview-150

Python

def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
	"""
	Do not return anything, modify nums1 in-place instead.
	"""
	m_idx = m - 1
	n_idx = n - 1
	right = m + n - 1
	
	while n_idx >= 0:
	    if m_idx >= 0 and nums1[m_idx] > nums2[n_idx]:
	        nums1[right] = nums1[m_idx]
	        m_idx -= 1
	    else:
	        nums1[right] = nums2[n_idx]
	        n_idx -= 1
	    
	    right -= 1

C++

class Solution {
public:
  void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
    int m_idx = m - 1;
    int n_idx = n - 1;
    int right = m + n - 1;

    while (n_idx >= 0){
        if (m_idx >= 0 && nums1[m_idx] > nums2[n_idx]){
            nums1[right] = nums1[m_idx];
            m_idx -= 1;
        }
        else{
            nums1[right] = nums2[n_idx];
            n_idx -= 1;
        }
        right -= 1;
    }
  }
};

$$ \text{Time} = O(N+M)\\ \text{Space} = O(1) $$

Pseudocode: