采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
void removeElementAll(T e) { for (int i = 0; i < size; i++) { if ( data[i] == e ) { remove(i); i--; // 与后面的 i++ 相抵消 } } }
可以。但我要是没有理解错,remove(i) 又是一个 O(n) 的过程。所以整个函数是一个 O(n^2) 的过程了。不过删除所有和 e 相等的元素可以做到 O(n) 解决:)
继续加油!:)
啊,看来我还是经验不够,没往提升性能这方面想,多谢 bobo 老师指点。 现在补充一个 O(n) 的写法: ```C++ void removeElementAll(T e) { int i = 0; int j = 0; int removedN = 0; // 用于记录需要被删除的元素的个数 while ( j < size ) { if ( data[j] != e ) data[i++] = data[j++]; else { removedN++; j++; } } size - removedN; } ```
登录后可查看更多问答,登录/注册
动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…
10.3k 16
1.4k 17
1.3k 14
1.2k 14