从数组长度特别大的数组中,删除某一个元素,减少数组移动次数
假设数组长度为一亿,删除数组中元素值等于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次