请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

分享一个删除所有指定元素的方法

void removeElementAll(T e) {
    for (int i = 0; i < size; i++) {
        if ( data[i] == e ) {
            remove(i);	
            i--; 	// 与后面的 i++ 相抵消
        }
    }
 }

正在回答

1回答

可以。但我要是没有理解错,remove(i) 又是一个 O(n) 的过程。所以整个函数是一个 O(n^2) 的过程了。不过删除所有和 e 相等的元素可以做到 O(n) 解决:)


继续加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 慕用0058068 #1
    啊,看来我还是经验不够,没往提升性能这方面想,多谢 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;
    }
    
    ```
    回复 有任何疑惑可以回复我~ 2020-08-07 14:10:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信