小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
嗨!~ 大家好,我是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--;
}
}
};