合併排序陣列 | 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!
評論