Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 唯一元素的计数_Java_Arrays_Duplicates - Fatal编程技术网

Java 唯一元素的计数

Java 唯一元素的计数,java,arrays,duplicates,Java,Arrays,Duplicates,嗨,我应该在数组排序之后计算唯一元素的数量,不包括重复的元素,但是我得到了错误的输出 In in = new In(args[0]); int[] whitelist = in.readAllInts(); Arrays.sort(whitelist); int count = 0; for (int i = 0; i < whitelist.length; i++) { if (whitelist[i] == whitelist[count]) {

嗨,我应该在数组排序之后计算唯一元素的数量,不包括重复的元素,但是我得到了错误的输出

In in = new In(args[0]);
int[] whitelist = in.readAllInts();
Arrays.sort(whitelist);

int count = 0;
   for (int i = 0; i < whitelist.length; i++) {
       if (whitelist[i] == whitelist[count]) {
           count++;
       }
   }
while (!StdIn.isEmpty()) {
    int key = StdIn.readInt();
    rank(key, whitelist);
}
   System.out.println(count);
In-In=newin(args[0]);
int[]白名单=in.readAllings();
排序(白名单);
整数计数=0;
for(int i=0;i
} }

预期输出:java InstrumentedBinarySearch tinyW.txt 六十五

得:16

我是否计算了重复的数量或其他什么?

int flag=0;
  int flag = 0;
  int count = 0;
       for (int i = 0; i < whitelist.length; i++) //Element to be checked for
  {
           for (int j=0; j< whitelist.length ; j++) //Loop that goes through the whole array 
       {
               if (whitelist[i] == whitelist[j]) //checks if there are duplicates
               {
                   flag++; // count
               }
       }
    if( flag==1) //There should be only 1 instance of the element in the array and that is the element itself
    { 
       System.out.println(whitelist[i]); //displays unique element
       count++; // Keeps count 
    }
 }
整数计数=0; for(int i=0;i
此算法计算数组中有多少不同的唯一数字。多次出现的数字仅计为1。我假设这就是你的意思,而不是“数字只出现一次”

正如另一个答案中所建议的,有一种更简单的方法来实现它,但它需要一个嵌套的for循环,因此执行起来非常复杂。我下面的算法试图在与阵列大小成正比的线性时间内解决这个问题

int uniquesFound = 0;

// Assume that array is sorted, so duplicates would be next to another.
// If we find duplicates, such as 12223, we will only count its last instance (i.e. the last '2')
for (int i = 0; i < whitelist.length; i++) {

    // If we are at the last element, we know we can count it
    if (i != whitelist.length - 1) {
        if (whitelist[i] != whitelist[i+1]) {
            uniquesFound++;
        }
        else {
            // Nothing! If they are the same, move to the next step element
        }
    } else {
        uniquesFound++;
    }
}
int uniquesFound=0;
//假设数组已排序,所以重复项将位于另一个旁边。
//如果我们找到重复的实例,例如12223,我们将只计算其最后一个实例(即最后一个“2”)
for(int i=0;i
例如,给定数组:

{1,2,3}这将产生3,因为有3个唯一的数字


{1,2,3,3,3,4,4,4,5}这将产生5,因为仍然有5个唯一的数字

首先让我们看一下你的循环:

for (int i = 0; i < whitelist.length; i++) {
    if (whitelist[i] == whitelist[count]) {
        count++;
    }
}
b。更改条件以计算不相等的连续元素之间的过渡。由于您正在计算转换的数量,因此最后需要将
1
添加到
count
,以获得数组中唯一元素的数量:

for (int i = 0; i < whitelist.length - 1; i++) {
    if (whitelist[i] == whitelist[i + 1]) {
        count++;
    }
}
int result = whitelist.length - count;
for (int i = 0; i < whitelist.length - 1; i++) {
    if (whitelist[i] != whitelist[i + 1]) {
         count++;
    }
}
int result = count + 1;
for(int i=0;i

请注意,在这两种情况下,我们只循环到
whitelist.length-1
,这样
whitelist[i+1]
就不会超出范围。

您能提供更多代码来说明问题吗?什么是
白名单
?在你的头脑中运行这个程序(就像你是计算机一样),你可能会看到它为什么不起作用。这是主要的方法。这是以前回答过的问题:编辑问题之前,这可能是我的答案的重复。这段代码将在数组中找到唯一的元素。我已经添加了注释来解释每一行。OPs代码使用白名单[count],这毫无意义,因为count是重复数count,它不会像我的代码中的j变量那样浏览数组的其余部分。希望有帮助。这个方法给我的答案是10而不是65。为了更清楚,我应该在排序后删除白名单中的重复键。因此,检查的键的数量应该小于未删除重复项时的数量,根据您的逻辑,这似乎是正确的。但是它不会产生任何结果,只是空白。如果排序步骤碰巧也删除了重复的键,那么唯一项的数量就等于数组的长度。这是因为如果删除重复的键,数组中只剩下唯一的数字。在这种情况下,如何打印唯一键的数量?如果您告诉我白名单已排序并已删除所有重复键,则唯一键的数量是白名单数组的长度。只需打印白名单。如果你还不明白,为什么不给我举个例子,告诉我白名单上有什么,答案应该是什么。这很奇怪,你的解决方案给了我和我发布的答案一样的答案。