zoukankan      html  css  js  c++  java
  • 有序数组合并

    算法题其实不要慌就行了,就是太久没做了。

    题:有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_b
                    cursor_b += 1   # 移动list_b的游标
                else:
                    result[cursor_r] = item_a   # 因为list_a是for循环遍历,所以不需要游标
                    break   # 继续从list_a取数
    
        # 因为是采用两两比较,放入最小的数,所以会导致丢失最大的数,这里加入最大数
        last = max(a[-1], b[-1])
        result[-1] = last
        return result
    
    if __name__ == '__main__':
        a = [1, 2, 3, 4, 5]
        b = [2, 3, 4, 6]
        c = list_merge(a, b)
        print(a,b)
        print(c)
  • 相关阅读:
    FlowNet2.0论文笔记
    LeetCode NO477.汉明距离总和
    自然语言的分词方法之N-gram语言模型
    C++函数模板及其实例化和具体化
    Vue2源码解读(5)
    Vue2源码解读(4)
    Vue2源码解读(3)
    Vue2源码解读(2)
    Vue2源码解读(1)
    vue的双向绑定原理及实现
  • 原文地址:https://www.cnblogs.com/lurenjia1994/p/10575598.html
Copyright © 2011-2022 走看看