我正在尝试编写一个接受整数数组的方法,并返回该数组中唯一值的数量。例如,对于数组{5,6,5,7,5,7},该方法返回3,因为有3个重复项(5,5,7)。我不确定我哪里出错,我尝试创建一个变量list
,这样当我调用numUnique(list)
时,它会给我答案,但这似乎不起作用。有什么建议吗?
代码:
import java.util.Scanner;
public class Unique_Values {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] list = new int[n];
System.out.printf("%d%n ", list);
}
public static int numUnique(int[] list) {
if (list.length == 0) {
return 0;
} else {
int count = 1;
for (int i = 1; i < list.length; i++) {
if (list[i] != list[i - 1]) {
count++;
}
}
return count;
}
}
}
答案 0 :(得分:0)
这不是解决问题的代码,因为我认为考虑这个问题很重要。
执行此操作的一种强力方法是使用列表,将其称为returnList,并在读取时将元素添加到该列表中。每次要向列表中添加元素时,首先应该检查列表以确保之前没有添加元素。如果之前已添加,则不将该元素添加到列表中,然后移动到下一个输入元素。在读完整个数组之后,简单地返回returnList的长度,这是微不足道的。
请注意,这绝不是一种有效的方法(要求您每次都检查一次列表),这只是解决此问题的一种方法。我恳请您尝试考虑更好的方法来解决问题!
祝你好运!答案 1 :(得分:0)
您的代码会将list[i]
与list[i - 1]
进行比较,这意味着您只需检查相邻的重复项。要过滤掉所有重复项,您需要使用内部循环检查list[i]
每个连续元素。例如:
int count = 1;
for (int i = 0; i < list.length - 1; i++) {
for (int j = i + 1; j < list.length && list[i] != list[j]; j++) {
if (j == list.length - 1) {
count++;
}
}
}
请注意,有很多方法可以用来表示上述内容,并且与内部循环相比,计算不同元素的方法更简洁,更有效。如评论中所述。
答案 2 :(得分:0)
您的代码if (list[i] != list[i - 1]) { count++; }
只检查相邻的重复项。所以在数组[5,4,5]中,两个五个不会被视为重复。
解决这个问题的一种方法是使用强力方法,即嵌套for循环,内部for循环通过完整的剩余数组。
我认为更好的方法是扫描数组,并继续将值插入设置。扫描完成后,集合的长度就是您的答案(唯一值的数量)。
在Java中,考虑到输入是整数列表,可以使用以下代码:
public static int findNumberOfUniqueElements(List<Integer> list) {
if (list == null) {
return 0;
}
return (new HashSet<Integer>(list)).size();
}
要使用任何语言进行调整的更通用的代码如下:
public static int findNumberOfUniqueElements(List<Integer> list) {
if (list == null) {
return 0;
}
Set<Integer> set = new HashSet<Integer> ();
for (int i=0; i<list.size(); i++) {
set.add(list.get(i)); // get list[i]
}
return set.size();
}
答案 3 :(得分:0)
如果您只想使用数组,
要查找重复条目的计数,您需要先对数组进行排序,然后比较相邻的元素,如果两者都相同则增加计数。
以下是代码:
public static int numUnique(int arr[])
{
int dup = 0;
Arrays.sort(arr);
for(int i = 1 ; i < arr.length ; i++)
{
if(arr[i-1] == arr[i])
dup++;
}
return dup;
}
使用ArrayList
有一个相对简单的方法以下是代码:
public static int numUnique(int arr[])
{
int dup = 0;
ArrayList<Integer> al = new ArrayList<Integer>();
for(int i = 0 ; i < arr.length ; i++)
{
if(!al.contains(arr[i]))
{
al.add(arr[i]);
}
else
dup++;
}
return dup;
}