在不使用Util类的情况下从数组中删除重复项

安奇

在将其标记为重复之前,请先阅读该问题

我编写了以下代码,以在不使用Util类的情况下从数组中删除重复项,但是现在我被卡住了

public class RemoveDups{
    public static void main(String[] args) {
        int[] a = { 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 3, 1, 4, 52, 1, 45, };

        int temp;
        for (int i : a) {
            for (int j = 0; j < a.length - 1; j++) {
                if (a[j] > a[j + 1]) {
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
        a = removeDups(a);
        for (int i : a) {
            System.out.println(i);
        }

    }

    private static int[] removeDups(int[] a) {
        int[] result = new int[a.length];
        int j = 0;
        for (int i : a) {
            if (!isExist(result, i)) {
                result[j++] = i;
            }
        }

        return result;
    }

    private static boolean isExist(int[] result, int i) {
        for (int j : result) {
            if (j == i) {
                return true;
            }
        }
        return false;
    }

}

现在的输出是

1
2
3
4
5
6
45
52
0
0
0
0
0
0
0
0
0
0

这是我的问题

  1. 我的代码在0的情况下不起作用
  2. 我不明白如何对数组进行排序可以减少执行时间
  3. 有什么方法可以在不使用Util类的情况下从数组中删除元素?我知道一种在数组中将转换数组删除然后再删除的方法,但是为此,我们还需要Util类自己实现。
乔尼

由于您处理的数字范围很小,因此您可以通过简单的“计数排序”删除重复项:在类似集合的数据结构中标记找到的数字,然后遍历该数据结构。一组boolean工作很好,可以减少基本的位集或哈希表来减少内存使用量。如果n是数组中元素的数量,并且m是范围的大小,则此算法的复杂度为O(n + m)。

private static int[] removeDups(int[] a, int maxA) {
    boolean[] present = new boolean[maxA+1];
    int countUnique = 0;
    for (int i : a) {
        if (!present[i]) {
            countUnique++;
            present[i] = true;
        }
    }

    int[] result = new int[countUnique];
    int j = 0;
    for (int i=0; i<present.length; i++) {
        if (present[i]) result[j++] = i;
    }

    return result;
}

我不明白如何对数组进行排序可以减少执行时间

在排序的数组中,您可以在一次扫描中检测重复项,从而花费O(n)的时间。由于排序比检查每个对要快-O(n log n)与O(n²)的时间复杂度-因此对数组进行排序要比使用朴素算法更快。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不使用`uniq`的情况下删除数组中的重复项?

来自分类Dev

在不使用额外数组的情况下删除重复字符

来自分类Dev

如何在不使用Distinct的情况下删除SQL查询中的重复项?

来自分类Dev

在不使用任何数据结构的情况下从输入中删除重复项

来自分类Dev

在不使用set的情况下从嵌套列表中删除重复项

来自分类Dev

在不使用set()的情况下删除元组中的重复项

来自分类Dev

在不使用熊猫的情况下合并和删除两个 csv 中的重复项

来自分类Dev

如何在不使用数组的情况下删除字符串中的重复单词?

来自分类Dev

在不使用附加缓冲区的情况下从Python中删除字符串中的重复项

来自分类Dev

如何在不使用硬核索引的情况下擦除父数组中子数组的重复项

来自分类Dev

防止在不使用索引的情况下插入重复项

来自分类Dev

在不更改元素顺序的情况下删除数组中的重复项

来自分类Dev

如何在不使用硬核索引的情况下擦除父级数组中子级数组的重复项

来自分类Dev

如何在不使用集合的情况下从python列表中删除重复的单词?

来自分类Dev

如何在SQL中不使用DISTINCT的情况下删除重复值?

来自分类Dev

如何在不使用集合的情况下从python列表中删除重复的单词?

来自分类Dev

如何在不使用内置函数的情况下从python中的数组中删除元素

来自分类Dev

在不导入库和使用集合的情况下删除列表中重复项的最快方法

来自分类Dev

C ++如何在不使用向量的情况下从数组中删除0个值

来自分类Dev

如何在不使用 Java 索引的情况下从 Arraylist 中删除数组元素

来自分类Dev

ASP.NET MVC - 在不使用模型注释的情况下检查国家名称中的重复项

来自分类Dev

MS Access-在不使用SQL Min / Max的情况下保留三项结果的同时删除基于三列的重复项

来自分类Dev

如何在不使用函数或类的情况下重复代码段以实现C ++中的高性能循环

来自分类Dev

在不使用sort()的情况下获取HTML LI元素的重复项

来自分类Dev

在不使用for循环的情况下更新重复项的单元格值

来自分类Dev

如何在不使用常量数组大小的情况下初始化私有类中的数组?

来自分类Dev

如何在不使用主键的情况下删除重复记录

来自分类Dev

在不使用ROW_NUMBER()函数的情况下删除重复的记录

来自分类Dev

如何在不使用While的情况下删除左侧重复的字符串?

Related 相关文章

  1. 1

    如何在不使用`uniq`的情况下删除数组中的重复项?

  2. 2

    在不使用额外数组的情况下删除重复字符

  3. 3

    如何在不使用Distinct的情况下删除SQL查询中的重复项?

  4. 4

    在不使用任何数据结构的情况下从输入中删除重复项

  5. 5

    在不使用set的情况下从嵌套列表中删除重复项

  6. 6

    在不使用set()的情况下删除元组中的重复项

  7. 7

    在不使用熊猫的情况下合并和删除两个 csv 中的重复项

  8. 8

    如何在不使用数组的情况下删除字符串中的重复单词?

  9. 9

    在不使用附加缓冲区的情况下从Python中删除字符串中的重复项

  10. 10

    如何在不使用硬核索引的情况下擦除父数组中子数组的重复项

  11. 11

    防止在不使用索引的情况下插入重复项

  12. 12

    在不更改元素顺序的情况下删除数组中的重复项

  13. 13

    如何在不使用硬核索引的情况下擦除父级数组中子级数组的重复项

  14. 14

    如何在不使用集合的情况下从python列表中删除重复的单词?

  15. 15

    如何在SQL中不使用DISTINCT的情况下删除重复值?

  16. 16

    如何在不使用集合的情况下从python列表中删除重复的单词?

  17. 17

    如何在不使用内置函数的情况下从python中的数组中删除元素

  18. 18

    在不导入库和使用集合的情况下删除列表中重复项的最快方法

  19. 19

    C ++如何在不使用向量的情况下从数组中删除0个值

  20. 20

    如何在不使用 Java 索引的情况下从 Arraylist 中删除数组元素

  21. 21

    ASP.NET MVC - 在不使用模型注释的情况下检查国家名称中的重复项

  22. 22

    MS Access-在不使用SQL Min / Max的情况下保留三项结果的同时删除基于三列的重复项

  23. 23

    如何在不使用函数或类的情况下重复代码段以实现C ++中的高性能循环

  24. 24

    在不使用sort()的情况下获取HTML LI元素的重复项

  25. 25

    在不使用for循环的情况下更新重复项的单元格值

  26. 26

    如何在不使用常量数组大小的情况下初始化私有类中的数组?

  27. 27

    如何在不使用主键的情况下删除重复记录

  28. 28

    在不使用ROW_NUMBER()函数的情况下删除重复的记录

  29. 29

    如何在不使用While的情况下删除左侧重复的字符串?

热门标签

归档