【LeetCode】合并两个有序数组

276 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

嗨!~ 大家好,我是YK菌 🐷 ,一个微系前端 ✨,喜欢分享自己学到的小知识 🏹,欢迎关注我呀 😘 ~ [微信号: yk2012yk2012,微信公众号:ykyk2012]

88. 合并两个有序数组【简单】

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/me…

这里和我们合并两个有序链表思想都是一样的,只是数据结构不同,由于数组的特点,我们这里是从数组末尾进行操作

/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {

    // 定义两个指针分别指向两个数组的末尾元素
    let i = m - 1;
    let j = n - 1;
    
    // 从后向前遍历temp数组
    for( let k = m+n-1; k >= 0; k--){
        if(nums1[i] >= nums2[j] || j<0){
            // 两个数组中,谁大谁进,如果另一个数组遍历完了,剩下的都进这个
            nums1[k] = nums1[i]; 
            // 指针前移
            i--;
        } else if (nums1[i] < nums2[j] || i<0){
            nums1[k] = nums2[j];
            j--;
        }
    }
};

在这里插入图片描述