88.2つの配列を結合する(Python)

1888 ワード

もっと多くの問題はステップを移動します【力ボタンの簡単な問題】
タイトル
難易度:★☆☆☆タイプ:配列
2つの秩序整数配列nums 1およびnums 2が与えられ、nums 2がnums 1に結合され、num 1が秩序配列になる.
説明:
初期化nums 1およびnums 2の要素数は、それぞれmおよびnである.nums 1にはnums 2の要素を保存するのに十分な空間(空間サイズがm+n以上)があると仮定できます.

入力:nums 1=[1,2,3,0,0],m=3 nums 2=[2,5,6],n=3
出力:[1,2,2,3,5,6]
に答える
この問題は、次の問題を解決することに相当します.
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[:] = sorted(nums1[:len(nums1)-len(nums2)]+nums2)

この問題には,nums 2の数をnums 1に1つずつ加えることが要求される.私たちがnums 2の数を小さい頃から大きく遍歴し、nums 1の対応する位置に加えると、nums 1の数の後にすべての数が新しく加わった数の騰位置に後方に移動するため、私たちは大きいから小さい遍歴し、2つの数が共に遍歴し、nums 1の空間が満たされるまで大きい数をnums 1の末尾に置くことになります.

class Solution:
    def merge(self, nums1, m: int, nums2, n):
        """
        Do not return anything, modify nums1 in-place instead.
        """
        index1, index2 = m - 1, n - 1                               #   nums1 nums2           index1 index2
        cur_index = m + n - 1                                       #   nums1     

        while index2 >= 0:                                          #  nums2            
            if index1 >= 0 and nums1[index1] > nums2[index2]:       #   nums1     ,      nums1 nums2 
                nums1[cur_index] = nums1[index1]                    #              
                index1 -= 1                                         
            else:
                nums1[cur_index] = nums2[index2]
                index2 -= 1
            cur_index -= 1

ここで注意すべきは、nums 1にnums 2を置くのに十分な位置があることをタイトルで承諾しているが、実際のテスト例では十分に置かれていない場合があるため、制御条件(index 1>=0)をループ内部に置く必要があり、whileと位置合わせできないとループに入らないことである.
質問やアドバイスがあれば、コメントエリアへようこそ~