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

假设数组长度为一亿,删除数组中元素值等于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次
原文地址:https://www.cnblogs.com/sunupo/p/13408342.html