面試題3 有序陣列合併

2021-06-29 04:24:52 字數 412 閱讀 8042

初階:合併兩個有序陣列a和b,使得結果依然有序。

高階:合併兩個有序陣列a和b,假設a有n個數,b有m個數,a陣列後面還有m個空餘空間,需要將結果儲存在a中。

答:一種解答當然是把兩個陣列放在一起重新排序了。這樣的時間複雜度是o(nlogn),沒有用到陣列已經有序的條件,所以顯然不是乙個期望的解答。那麼既然a和b已經有序,假設從小到大排序了,那麼a和b中最小的數一定是a[0]和b[0]中最小的,由此每次比較a和b頭上的數,然後拿出最小的,執行o(n)次運算後,即可得到a和b合併之後的有序陣列。

對於高階問題,實際上只需要轉個彎就可以了。因為做過了第乙個問題以後很容易會想到比較最小的兩個數,然後就發現需要插入操作了,這樣顯然就不對了。正確的方法是倒過來合併,即從最大的數開始合併,因為a的後面有足夠空間,所以每次比較出最大的數放在a陣列倒數的第乙個空位即可。

演算法有序陣列合併

最近看一本書上有乙個面試題,原題目是 有兩個遞增陣列 a1 a2,a1的記憶體空間足夠長,現在要求合併 a2到a1,並且要求移動次數最小 面試的時候 我們盡量要以 最高效的方式完成 下面是此題 o n 解法。合併 void mergearray int arra1,int arra2,int nle...

不同的有序陣列合併

有序陣列合併 void orderlistmerge int b self printlist a length alen self printlist b length blen int result 14 int p 0,q 0,i 0 p為a陣列下標 q為b陣列下標,i為合併陣列下標 任意子陣...

陣列 合併有序陣列 雙指標

leetcode88 給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。初始化 nums1 和 nums2 的元素數量分別為 m 和 n 你可以假設 nums1 的空間大小等於 m n,這樣它就有足夠的空間儲存來自 num...