zoukankan      html  css  js  c++  java
  • 从数组长度特别大的数组中,删除某一个元素,减少数组移动次数

    假设数组长度为一亿,删除数组中元素值等于1的元素

    1.用一个数组记录需要删除元素的索引,这样的问题是需要额外的空间,存储索引数组

    if __name__ == "__main__":
    
        idx=[]
        arr=[1,2,3,1,3,1,2,3,4,5,3,1,2,3,1,2,3,2,3,1,1,2,3,4,5,4,3,1,2,3,2,1,2,3,2]
        for i in range(len(arr)):
            if arr[i]==1:
                idx.append(i)
        i,j=0,0
        while i<(len(arr)-len(idx)):
            if j not in idx:
                arr[i] = arr[j]
                i+=1
                j+=1
            else:
                j+=1
        print(arr[:len(arr)-len(idx)])

    2.从数组末尾向前删除元素( 只是减少了需要被删除元素的不必要的移动)

    eg:

     arr=[1,2,3,1,3,1,2,3]
    若从前往后删除,
      第一个1删除的时候,后面的所有元素(包括1)移动了7次
      第二个1删除的时候,后面的元素移动了4次
      第三个1删除的时候,后面的元素移动了2次
    若从后往前删除
      第三个1删除的时候,后面元素移动了2次
      第二个1删除的时候,后面的元素移动了3次
      第一个1删除的时候,后面的元素移动了5次
  • 相关阅读:
    C
    如何让asp.net mvc 直接运行mobile页面
    Nuget找不到服务器
    C#调用R语言输出图片
    sql列转行
    C#读取注册表
    关于这个博客,关于我
    NOIP 2016 简要题解
    CSP2019 题解
    CF 练死劲
  • 原文地址:https://www.cnblogs.com/sunupo/p/13408342.html
Copyright © 2011-2022 走看看