Solution 1 - Optimized
Fill nums1 from the back using two pointers so unread values are never overwritten.
Fill nums1 from the back using two pointers so unread values are never overwritten.
""" 0088.1 - Merge Sorted Array - Solution 1 - Optimized """
#####################################################################################
# Imports
#####################################################################################
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def merge(self, nums1, m: int, nums2, n: int) -> None:
"""Merge Sorted Array Function (in-place)"""
i, j, k = m - 1, n - 1, m + n - 1
while j >= 0:
if i >= 0 and nums1[i] > nums2[j]:
nums1[k] = nums1[i]
i -= 1
else:
nums1[k] = nums2[j]
j -= 1
k -= 1
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
a = [1, 2, 3, 0, 0, 0]
Solution().merge(a, 3, [2, 5, 6], 3)
assert a == [1, 2, 2, 3, 5, 6]
print("tests passed")
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()/** 0088.1 - Merge Sorted Array - Solution 1 - Optimized */
/////////////////////////////////////////////////////////////////////////////////////
// Classes
/////////////////////////////////////////////////////////////////////////////////////
class Solution {
/** Merge Sorted Array Function (in-place) */
merge(nums1, m, nums2, n) {
let i = m - 1;
let j = n - 1;
let k = m + n - 1;
while (j >= 0) {
if (i >= 0 && nums1[i] > nums2[j]) {
nums1[k--] = nums1[i--];
} else {
nums1[k--] = nums2[j--];
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////
// Functions
/////////////////////////////////////////////////////////////////////////////////////
function testcase() {
/** Test Function */
const a = [1, 2, 3, 0, 0, 0];
new Solution().merge(a, 3, [2, 5, 6], 3);
console.assert(a.join(",") === "1,2,2,3,5,6");
console.log("tests passed");
}
/////////////////////////////////////////////////////////////////////////////////////
// Main
/////////////////////////////////////////////////////////////////////////////////////
testcase();/** 0088.1 - Merge Sorted Array - Solution 1 - Optimized */
/////////////////////////////////////////////////////////////////////////////////////
// Classes
/////////////////////////////////////////////////////////////////////////////////////
class Solution {
/** Merge Sorted Array Function (in-place) */
merge(nums1: number[], m: number, nums2: number[], n: number): void {
let i: number = m - 1;
let j: number = n - 1;
let k: number = m + n - 1;
while (j >= 0) {
if (i >= 0 && nums1[i] > nums2[j]) {
nums1[k--] = nums1[i--];
} else {
nums1[k--] = nums2[j--];
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////
// Functions
/////////////////////////////////////////////////////////////////////////////////////
function testcase(): void {
/** Test Function */
const a: number[] = [1, 2, 3, 0, 0, 0];
new Solution().merge(a, 3, [2, 5, 6], 3);
console.assert(a.join(",") === "1,2,2,3,5,6");
console.log("tests passed");
}
/////////////////////////////////////////////////////////////////////////////////////
// Main
/////////////////////////////////////////////////////////////////////////////////////
testcase();// 0088.1 - Merge Sorted Array - Solution 1 - Optimized
package main
/////////////////////////////////////////////////////////////////////////////////////
// Imports
/////////////////////////////////////////////////////////////////////////////////////
import "fmt"
/////////////////////////////////////////////////////////////////////////////////////
// Functions
/////////////////////////////////////////////////////////////////////////////////////
func merge(nums1 []int, m int, nums2 []int, n int) {
i, j, k := m-1, n-1, m+n-1
for j >= 0 {
if i >= 0 && nums1[i] > nums2[j] {
nums1[k] = nums1[i]
i--
} else {
nums1[k] = nums2[j]
j--
}
k--
}
}
func testcase() {
// Test Function
a := []int{1, 2, 3, 0, 0, 0}
merge(a, 3, []int{2, 5, 6}, 3)
fmt.Println(a)
}
/////////////////////////////////////////////////////////////////////////////////////
// Main
/////////////////////////////////////////////////////////////////////////////////////
func main() {
testcase()
}// 0088.1 - Merge Sorted Array - Solution 1 - Optimized
/////////////////////////////////////////////////////////////////////////////////////
// Structs
/////////////////////////////////////////////////////////////////////////////////////
struct Solution;
/////////////////////////////////////////////////////////////////////////////////////
// Implementations
/////////////////////////////////////////////////////////////////////////////////////
impl Solution {
/// Merge Sorted Array Function (in-place)
pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: Vec<i32>, n: i32) {
let mut i: i32 = m - 1;
let mut j: i32 = n - 1;
let mut k: i32 = m + n - 1;
while j >= 0 {
if i >= 0 && nums1[i as usize] > nums2[j as usize] {
nums1[k as usize] = nums1[i as usize];
i -= 1;
} else {
nums1[k as usize] = nums2[j as usize];
j -= 1;
}
k -= 1;
}
}
}
fn main() {
let mut a: Vec<i32> = vec![1, 2, 3, 0, 0, 0];
Solution::merge(&mut a, 3, vec![2, 5, 6], 3);
assert_eq!(a, vec![1, 2, 2, 3, 5, 6]);
}