java - 返回数组java中的唯一数字

标签 java

我一直在尝试编写代码来查找排序数组中的唯一值,该数组也有重复项。

到目前为止,我已经写了:

public static int numUnique (double[] list) {
    int counter = 0;

    if (Array.getLength(list) < 1) {
            return Length.list);
        }
    else{
        for (int i=0; i < Length.list); i++){
            for (int j=i+1; j< Length.list); j++){
                if (list[i] != list[j]){
                    newrArray[i] = list[i];
                    counter++;

                }
            }
        }
    }

    return counter;
}

输入:

{31, 31, 31, 31, 33, 46, 46, 46, 46, 46, 52, 65, 65, 66, 75, 98, 98}

预期输出:

8

我不能使用 HashSetArrayList。我认为唯一可行的选择是从一个数组复制到另一个数组,然后计算新数组中的内容(假设只有唯一值被复制到新数组中)。

最佳答案

你知道这个数组中的最大值吗?如果它足够小,您可以创建一个该大小的 boolean 数组,如果在原始数组中找到该值,则将该值设置为 true。

这叫做 counting sort .

例子:

boolean[] found = new boolean[max];

for(int i : list)
    found[i] = true;
    
int unique = 0;
for(int i = 0; i < found; i++)
    if(found[i]) unique++;

如果没有,计算唯一元素的个数并插入。

public int uniqueAmount(double[] list) {
    double last = Double.NaN;
    int unique = 0;
    for(int i = 0; i < list.length; i++)
        if(last != (last = list[i]))
            unique++;
    return unique;
}

public double[] uniqueValues(double[] list) {
    int unique = uniqueAmount(list);
    double[] found = new double[unique];
    double last = Double.NaN;
    last = list[0];
    found[0] = last;
    for(int i = 0, index = 1; i < list.length; i++)
        if(last != list[i]) {
            found[index++] = list[i];
            last = list[i];
        }
    return found;
}

测试成功。 如果调用 uniqueAmount 则返回 8,如果调用 uniqueValues 则返回数组 [31.0, 33.0, 46.0, 52.0, 65.0, 66.0, 75.0, 98.0] >(根据您的编辑要求)。

关于java - 返回数组java中的唯一数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41684717/

相关文章:

java - 转换另一个列表中的列表

java - 如何在 Java 中动态命名对象?

java - 其类型独特?

java - 在 android studio 中的每个新项目中获取 [不幸的是应用程序停止工作],但不是

java - Dvertx.runArgs 无法在 Intellij 中读取为 VM 选项

java - 抛出 NoSuchBeanDefinitionException

java - 使用 Autowire 时,在哪里设置要连接的 bean?

java - 单独的线程来更改标签图标

java - 将原始字节值转换为 Java 类型

java - jface 中最后一列变得过大