合併排序陣列 | Easy | LeetCode#88. Merge Sorted Array
題目敘述

- 題目難度:
Easy - 題目敘述: 題目給定兩個整數陣列
nums1,nums2,並以 非遞減的順序排序(non-decreasing order) ,並且給定整數m以及n分別代表兩個陣列中有多少元素。 題目要求合併兩個陣列,並且一樣已非遞增的順序存放,需要將nums2的元素合併到nums1,而不需用函數返回,nums1函數的長度會是m+n而前m的元素會是原先nums1中的元素。
可以看上面範例圖中的第一個測資,
nums1中的0會被nums2取代掉,並且m為3,由於是非遞減排序的陣列,因此0不算是元素之一。
解法
一開始的想法
我的想法就是先將 nums2 的部分填補到 nums1 多出來的地方,在去排序
我的解答
1 | class Solution { |
如果 nums2 為空,則可以直接回傳,因為答案就會是 nums1 本身。如果 nums1 元素都為0 (m=0),則需要將nums2 內容全部複製到 nums1。 接著後面透過while迴圈來實現 將 nums2 元素填補到 nums1 空的地方 這回事,這裡透過兩個額外變數 i j 來分別保存 nums1 中0元素的起點以及 nums2的起點。迴圈結束後就代表 nums2 元素都添加到 nums1 空的地方了,接著就透過 sort() 進行排序。
執行結果

複雜度
時間複雜度
nums1元素全為0的處理狀況會是 $O(n)$, $n$ 為nums1長度- while 迴圈
nums2將nums1插入陣列尾端,會進行n次操作,因此是 $O(n)$ sort()會將nums1中的前 $m+n$ 個元素進行排序,因此複雜度會是 $O(m+n)log(m+n)$
整體時間複雜度會是 $O((m+n)log(m+n))$
空間複雜度
$O(1)$ 額外變數都是使用常數空間
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 Kevin Liu's 部落格 || Technical || Travel!
評論










