【初级指标-能通就行】Problem: 88. 合并两个有序数组

38 阅读1分钟

Problem: 88. 合并两个有序数组

思路

  • 第一种,双指针法。 类似,两个班级身高排队。用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()