LikouNO.882つの順序付けられた配列をマージ

トピックリンク

トピックの詳細

ここに画像の説明を挿入
ここに画像の説明を挿入

方法1:マージソートで順序付けられた配列をマージするというアイデアを使用する

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.
        """
        # 主要参考归并排序的思路,将符合条件的nums2中的值插入nums1中
        idx1 = idx2 = 0
        while idx1<m+n and idx2<n: # nums1中会预留出nums2数量(n)的0用来占位,所以idx1<m+n,否则n<m时循环可能提前结束,比如:[4,0,0,0,0,0] 1 [1,2,3,5,6] 5 ,错误输出:[1,4,2,3,5,6]
            if nums1[idx1] > nums2[idx2]:
                nums1.insert(idx1,nums2[idx2])
                idx1+=1
                idx2+=1
            else:
                idx1+=1
        #程序到此有两种情况:nums2已经完全插入nums1中,此时需要切除多余的占位符0;nums1已经排好序,nums2还有数据因为占位符0比nums2后面的数小而未插入,此时需要把nums2剩余的数据替换到nums1中的相应位置
        length = m+idx2
        nums1[length:] = nums2[idx2:]

方法2:直接配列マージ+ sort()

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.
        """
        nums1[m:] = nums2
        nums1.sort() # 默认升序排列

おすすめ

転載: blog.csdn.net/qq_33489955/article/details/123883580