• 从数组长度特别大的数组中,删除某一个元素,减少数组移动次数


    假设数组长度为一亿,删除数组中元素值等于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次
  • 相关阅读:
    FTP与HTTP上传文件的对比
    【FTP】Wireshark学习FTP流程
    【CSS】div
    浏览器URL中“#” “?” &“”作用
    【EF】vs2017中没有EF模型
    C# List的使用
    C# Dictionary使用
    Git/GitHub的一些问题
    PHP中的break与continue
    css使文字垂直水平居中
  • 原文地址:https://www.cnblogs.com/sunupo/p/13408342.html
Copyright © 2020-2023  润新知