删除所有值,removeAllElement这么写可以吗?老师

来源:2-5 包含,搜索和删除

慕粉0752201559

2019-08-28

     public void removeAllElement(int e){
        int index = find(e);
        if (index!=-1){
            for (int i = 0; i < size; i++) {
                if (data[i]==e){
                    remove(i);
                    i--;
                }
            }
        }else {
            System.out.println("数组中不存在该值");
        }
    }
写回答

3回答

liuyubobobo

2019-08-28

赞!完全可以!:)


继续加油!:)

0
3
sudo1995
//删除全部元素e public void removeAllElement(int e){ int index = find(e); while (index != -1){ removeElement(e); index = find(e); } } 老师,可以这样吗
2022-02-25
共3条回复

sudo1995

2022-02-25

//删除全部元素e
public void removeAllElement(int e){
    int index = find(e);
    while (index != -1){
        removeElement(e);
        index = find(e);
    }
}

老师,可以这样吗


0
1
liuyubobobo
逻辑是正确的,但这样做比这个同学提问的代码效率低。因为 find 每次都从头开始找元素 e,假设这个数组前 100 万个元素都不是 e,后 100 万个元素都是 e,你的代码每轮删除一个 e,对于前 100 万个元素都要重新遍历一遍。而提问同学的代码每次找新的 e,都是从上次删除的位置之后继续寻找的:)
2022-02-26
共1条回复

慕用5014806

2020-01-06

你好  请问i-- 应该怎么理解

0
3
liuyubobobo
回复
Screenly
我不能肯定你的“理解”是否正确。因为理解是主观的,如果你的“理解”能得到正确的“逻辑”的话,那么理论上就是正确的。但在我看来,你的理解有问题。因为 i-- 发生在 remove(i) 之后,此时这个元素已经删除了,“保持被移除位置的前面”说不通(为什么要保持被移除位置的前面?)。i -- 的意义是保证没有一个元素漏查。在 remove(i) 执行以后,i 后面的所有元素的下标都前移了,所以 i 也要前移。
2022-02-26
共3条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程