LeetCode 每日一題 合併排序的陣列

2021-10-03 11:08:04 字數 871 閱讀 7515

給定兩個排序後的陣列 a 和 b,其中 a 的末端有足夠的緩衝空間容納 b。 編寫乙個方法,將 b 合併入 a 並排序。

初始化 a 和 b 的元素數量分別為 m 和 n。

示例:輸入:

a = [1,2,3,0,0,0], m = 3

b = [2,5,6], n = 3

輸出:[1,2,2,3,5,6]

看到這個題,我們的第一反應是讓兩個指標分別指向陣列a和陣列b的第乙個元素,並進行比較;如果a陣列的元素較小,則指向a的指標向右移一步指向下乙個元素,如果b陣列的元素較小,則將b指標指向的元素放入a指標指向的元素位置,並將a指標指向的元素和它後面的所有元素依次向右移動一步;如此迴圈操作,直到比較完畢

這個方法是我們首先能想到的,比較直觀易於實現,但它的缺點是每進行一次比較插入操作需要移動大量的元素,時間複雜度為o(mn)

我們定義三個指標p1、p2、p3分別指向陣列a的尾部a[m-1]、陣列b的尾部b[n-1]和合併後陣列的尾部a[m+n-1];比較a[p1]和b[p2],將它們兩者中較大的放入a[p3],然後p3和指向a[p1]、b[p2]較大數字的指標向左移一位;若p1、p2其中乙個已經指向陣列最左位置,則另乙個將所有元素依次放入剩餘a[0:p3]中,直到p1、p2都分別指向了a、b的最左位置

題解**:

class

solution

else

}else

if(p1>=0)

else

p3--;}

}}

時間複雜度:o(mn)空間複雜度:o(1)

每日一題 合併排序

title 每日一題 合併排序 date 2019 11 02 23 53 02 tags 73.合併排序 10分 c時間限制 3000 毫秒 c記憶體限制 3000 kb 題目內容 使用合併排序演算法,對輸入的n個資料進行按公升序排序。輸入描述 分兩行,第一行是整數n,第二行是n個整數,每個整數之...

合併排序的陣列 leetcode每日一題

這道題並不難,或許每個人都能想到直接賦值給a,然後再排序就完了。然後我刷這道題學到了這種雙指標的做法。1.乙個指標t1指向a的最後乙個數 3 乙個指標t2指向b的最後乙個數 6 2.如果t1 t2,就把t1插到 t1 t2 1 的位置然後指標t1向前移動一格 反之,就把t2插到 t1 t2 1 的位...

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...