有序数组合并
算法題其實不要慌就行了,就是太久沒做了。
?
題:有3個數組從小到大,寫一段代碼合并成一個數組,并保證順序
?
大致思路:
1. 拆成兩個數組合并2. 構造一個新數組,為的是不影響原數組,而且修改數組比插入數字消耗少3. 因為源數組本身有序,所以可根據順序,減少運算次數4. 結果數組弄個游標,初始為0,記錄操作位置,從兩個數組取出值比較,小的數加入到結果數組,再從小的數這個數組再取數比較,直到大于另外一個數組的數,時間復雜度為O(n)?
?
代碼:
# encoding='utf8'def list_merge(list_a, list_b):'''返回兩個數組合并的結果'''len_a = len(list_a)len_b = len(list_b)result = [None for i in range(len_a + len_b)] # 構造返回數組cursor_r = -1 # result游標cursor_b = 0 # list_b游標# 依次從數組的最前面取出最小的數,更新到結果數組for item_a in list_a:for idx in range(cursor_b, len_b):cursor_r += 1 # 移動游標item_b = list_b[idx]if item_a > item_b:result[cursor_r] = item_bcursor_b += 1 # 移動list_b的游標else:result[cursor_r] = item_a # 因為list_a是for循環遍歷,所以不需要游標break # 繼續從list_a取數# 因為是采用兩兩比較,放入最小的數,所以會導致丟失最大的數,這里加入最大數last = max(a[-1], b[-1])result[-1] = lastreturn resultif __name__ == '__main__':a = [1, 2, 3, 4, 5]b = [2, 3, 4, 6]c = list_merge(a, b)print(a,b)print(c)?
轉載于:https://www.cnblogs.com/lurenjia1994/p/10575598.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 对于python 3.x与python2
- 下一篇: 论投机者的自我修养