題目:
given two sorted integer arraysnums1andnums2, mergenums2intonums1as one sorted array.
note:
you may assume thatnums1has enough space (size that is greater or equal tom+n) to hold additional elements fromnums2. the number of elements initialized innums1andnums2aremandnrespectively.
翻譯:給定2個排序好的整數陣列nums1和nums2,把nums2合併到nums1中成為1個排序的陣列。
提示:你可以假定nums1有足夠的空間(=m+n)來容納來自nums2的額外的元素。nums1和nums2的元素的個數各自被初始化為m和n。
分析:1. 如果nums1從前往後遍歷的話,nums2中的元素需要插入nums1,這個時候每插入一次,就會需要將nums1的元素往後移動(或者需要申請額外的儲存空間)。但是我們反過來想,由於合併後的陣列長度是確定的,我們可以從最大的數開始寫入,這個時候由於nums1的後面部分的空間是未使用的,剛好可以直接覆寫。
2. 需要考慮比較特殊的情況,就是陣列可能為空。2個陣列都為空自然進不去迴圈。但是其中乙個為空,就要考慮陣列可能發生越界的情況了。並且兩個陣列都是排好序的,更加方便我們排序。
j**a版本:
class solution
}注意此處,由於假設nums1是足夠大的,即使nums2中的元素全大於nums1,由於從後往前新增,nums1 仍然可以保持不變。所以不需要再判斷nums1中原有元素索引是否過界。
即假若nums2中j個元素全遍歷完後,nums1中剩餘的元素只需要保持原有位置即可,不用再排序。但若nums1中原有i個元素遍歷完後,新陣列前面的元素與後面的元素是有重複的,nums2中剩餘的元素還需要依次替換掉之前nums1中前面索引座標的元素。
python版本:
def merge(self, nums1, m, nums2, n):
while m > 0 and n > 0:
if nums1[m-1] >= nums2[n-1]:
nums1[m+n-1] = nums1[m-1]
m -= 1
else:
nums1[m+n-1] = nums2[n-1]
n -= 1
if n > 0:
nums1[:n] = nums2[:n]c++版本:class solution }};
程式設計,還是程式設計
喜歡程式設計,雖然水平一般,但還是執著地學習與程式設計有關的知識。中間因為工作關係與程式設計遠離了一段時間,現在又重拾起來,細想起來還是因為喜歡吧。喜歡程式軟體的思想和原理,喜歡程式 的魅力和成就感。程式設計軟體的思想是最值得學習的,一直認為思想決定行動,思想改變世界。每種軟體的流行和受人追捧,無不...
少兒程式設計程式設計
機械人比賽,聽上去讓人有一種高大上的科技感,沒錯,在大多數人眼裡,玩機械人那是科學家做的事情,不過隨著機械人教育的普及,越來越多的孩子也能夠駕馭這高大上的機械人。格物斯坦小坦克告訴你原因,這是歸結於孩子對於程式設計課程的學習,學會對機械人進行程式設計了,自然就能玩轉機械人啦。參加機械人比賽的意義遠遠...
LINUX程式設計 socket程式設計
什麼是套接字 套接字是一種通訊過程,它使客戶 伺服器系統的開發工作既可以在本地單機上進行,也可以跨網路進行。套接字建立過程 1,建立乙個套接字,這是分配給該伺服器程序的乙個作業系統資源,套接字由伺服器通過系統呼叫socket建立出來的,所以其它程序將不能對它進行訪問。2,給套接字起個名字,用系統呼叫...