首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从数组中获取值而不计算其重复数?

如何从数组中获取值而不计算其重复数?
EN

Stack Overflow用户
提问于 2019-05-23 08:17:46
回答 3查看 78关注 0票数 0

我知道这个标题真的很糟糕,但我花了大约10分钟的时间想出一种简洁的方式来描述我的问题,但我做不到,这个程序应该创建一个numUnique()静态方法,它返回数组中唯一数字的数量。因此,例如,如果我有一个包含{2,4,2,7,16,4}的数组,唯一数字的数量将是4 (2,4,7和16)。

我正在编写代码来查找数组中的重复项,然后我意识到,当我有重复项时,我不知道如何处理它,我一直在绞尽脑汁想出一个解决方案,但我不能。

以下是到目前为止的代码:

代码语言:javascript
复制
public class Unique {
    public static void main(String[] args) {
        int[] numbers = {1, 6, 2, 14, 6, 8, 2, 1, 23};
        numUnique(numbers);
    }

    public static void numUnique(int[] array){
        Arrays.sort(array);
        for (int i = 0; i < array.length; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (array[i] == array[j])
                    //code here
            }
        }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-23 08:40:53

我的理解是,您应该计算(而不是全部返回)数组中唯一元素的数量。您正在尝试向下查看所有内容,但这足以跟踪重复项的数量。这段代码查看当前条目是否与之前的条目重复(这是因为您进行了排序,这是一个很好的步骤)。

代码语言:javascript
复制
import java.util.Arrays;
public class Unique {
public static void main(String[] args) {
    int[] numbers = {
        1,
        6,
        2,
        14,
        6,
        8,
        2,
        1,
        23
    };
    System.out.println(numUnique(numbers));
}

public static int numUnique(int[] array) {
    Arrays.sort(array);
    int dups = 0;
    for (int i = 1; i < array.length; i++) {
        if (array[i] == array[i - 1]) {
            dups++;
        }
    }
    return (array.length - dups);
}
}
票数 0
EN

Stack Overflow用户

发布于 2019-05-23 09:01:57

如果您希望保留到目前为止的代码并对列表进行排序,有两个似乎有意义的选择。其中一个是返回唯一整数的数量,另一个是返回唯一整数的列表。

返回唯一数的个数:

代码语言:javascript
复制
public static int numUnique(int[] array) {
    ArrayList<Integer> uniques = new ArrayList<>();
    Arrays.sort(array);

    uniques.add(array[0]);

    int prev = array[0];
    for (int i = 1; i < array.length; i++) {
        if(array[i] != prev){
            uniques.add(array[i]);
            prev = array[i]
        }
    }
    return uniques.size();
}

返回唯一编号列表,只需要返回唯一编号列表,而不需要.size()。

如果需要数组而不是列表,则需要返回以下内容:

代码语言:javascript
复制
return uniques.toArray(new Integer[list.size()]);
票数 0
EN

Stack Overflow用户

发布于 2019-05-23 09:06:57

如果您正在使用数组,为什么不进一步探索它呢

代码语言:javascript
复制
private static long numUnique(int[] numbers) {
    return Arrays.stream(numbers).distinct().count();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56266553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档