在Java中计算数组中的不同值

我正在编写一个代码,我有一个int [a],该方法应该返回唯一值的数量。 示例:{1} = 0个不同的值,{3,3,3} = 0个不同的值,{1,2} = 2个不同的值,{1,2,3,4} = 4个不同的值等。 我不是允许对数组进行排序

问题是我的方法可能不起作用。 我的声明有问题,我无法弄清楚。

public class Program { public static void main(String[] args) { int[] a = {1, 2, 3, 1}; System.out.println(differentValuesUnsorted(a)); //run: 4 //should be 3 } public static int differentValuesUnsorted(int[] a) { int values; //values of different numbers if (a.length < 2) { return values = 0; }else if (a[0] == a[1]) { return values = 0; }else { values = 2; } int numberValue = a[0]; for (int i = a[1]; i < a.length; i++) { if (a[i] != numberValue) { numberValue++; values++; } } return values; } } 

有人可以帮忙吗?

这实际上比大多数人已经做到的要简单得多,这种方法非常好用:

 public static int diffValues(int[] numArray){ int numOfDifferentVals = 0; ArrayList diffNum = new ArrayList<>(); for(int i=0; i 

让我一起来指导你:

1)提供一个int数组作为参数。

2)创建一个包含整数的ArrayList:

  • 如果该arrayList 包含作为参数提供的数组中的整数,则将数组参数中的该元素添加到数组列表中
  • 如果该arrayList DOES包含int数组参数中的该元素,则不执行任何操作。 (请勿将此值添加到arrays列表中)

注意:这意味着ArrayList包含int []中的所有数字,并删除重复的数字。

3)ArrayList的大小(类似于数组的length属性)将是所提供的数组中不同值的数量。


审讯

输入

  int[] numbers = {3,1,2,2,2,5,2,1,9,7}; 

产量 :6

首先创建不同的值数组,它可以简单地使用HashSet创建。

然后alreadyPresent.size()将提供许多不同的值。 但对于诸如 – {3,3,3} = 0 (数组包含相同元素)的情况; alreadyPresent.size()输出是1.为此使用这个简单的filter

 if(alreadyPresent.size() == 1)){ return 0; } 

以下代码将给出不同值的计数。

 import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class Demo { public static void main(String[] args) { int array[] = {9,9,5,2,3}; System.out.println(differentValuesUnsorted(array)); } public static int differentValuesUnsorted(int[] array) { Set alreadyPresent = new HashSet(); for (int nextElem : array) { alreadyPresent.add(nextElem); } if(alreadyPresent.size() == 1){ return 0; } return alreadyPresent.size(); } } 

您可以使用HashSet ,它只能包含唯一元素。 HashSet将删除重复的项目,然后您可以获取集合的大小。

 public static int differentValuesUnsorted(int[] a) { Set unique = new HashSet(); for (int val : a) { unique.add(val); // will only be added if a is not in unique } if (unique.size() < 2) { // if there are no different values return 0; } return unique.size(); } 

使用一组删除重复项

  public static int differentValuesUnsorted(int[] a) { if (a.length < 2) { return 0; } Set uniques = new HashSet<>(a); return singleUnique.size(); } 

尝试这个:

 import java.util.ArrayList; public class DifferentValues { public static void main(String[] args) { int[] a ={1, 2, 3, 1}; System.out.println(differentValuesUnsorted(a)); } public static int differentValuesUnsorted(int[] a) { ArrayList ArrUnique = new ArrayList(); int values=0; //values of different numbers for (int num : a) { if (!ArrUnique.contains(num)) ArrUnique.add(num); } values = ArrUnique.size(); if (values == 1) values = 0; return values; } } 

输入: {1,1,1,1,1} – 输出: 0
输入: {1,2,3,1} – 输出: 3

这是一种快速简洁的方法,不需要分配任何其他临时对象:

 public static int uniqueValues(int[] ids) { int uniques = 0; top: for (int i = 0; i < ids.length; i++) { final int id = ids[i]; for (int j = i + 1; j < ids.length; j++) { if (id == ids[j]) continue top; } uniques++; } return uniques; } 

试试这个…使用ArrayList非常简单。 你甚至不需要两个循环。 继续

 import java.util.*; public class distinctNumbers{ public static void main(String []args){ int [] numbers = {2, 7, 3, 2, 3, 7, 7}; ArrayList list=new ArrayList(); for(int i=0;i 

试试这个简单的代码片段。

 public static int differentValuesUnsorted(int[] a) { ArrayList list=new ArrayList(); //import java.util.*; for(int i:numbers) //Iterate through all the elements if(!list.contains(i)) //checking for duplicate element list.add(i); //Add to list if unique return list.size(); }