思路
- 第一种,双指针法。 类似,两个班级身高排队。用k记录队伍剩余位置。两个指针分别指两个班级最后一位。对比高矮。高的安排在nums1[k]位。高得班级指针前进一位。队伍剩余位置减一。再进行类似比较,直至排序完毕。
- 第二种,替换排序法。根据题意,取nums1得前M位。将M位以后得数据替换成nums2得数据。然后再进行排序
Code
javaScript
/**
* @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 k = m + n - 1;
let i = m - 1;
let j = n - 1;
while (j >= 0) {
if (i >= 0 && nums1[i] > nums2[j]) {
nums1[k] = nums1[i]
i -= 1
} else {
nums1[k] = nums2[j]
j -= 1
}
k -= 1
}
*/
// 普通替换排序
nums2.forEach((item,index)=>{
nums1[m+index] = item
})
nums1.sort((a, b) => a - b)
};
Python3
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.
"""
# 双指针概念
# k = m + n -1
# i , j = m -1, 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
# 利用List的sort
for i in range(n):
nums1[m+i] = nums2[i]
nums1.sort()