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

Wis*_*was 4 java arrays for-loop

我正在编写一个代码,我有一个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

Ram*_*nSB 6

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

public static int diffValues(int[] numArray){
    int numOfDifferentVals = 0;

    ArrayList<Integer> diffNum = new ArrayList<>();

    for(int i=0; i<numArray.length; i++){
        if(!diffNum.contains(numArray[i])){
            diffNum.add(numArray[i]);
        }
    }

    if(diffNum.size()==1){
            numOfDifferentVals = 0;
    }
    else{
          numOfDifferentVals = diffNum.size();
        } 

   return numOfDifferentVals;
}
Run Code Online (Sandbox Code Playgroud)

让我带你走过去:

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

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

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

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

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


审讯

输入:

  int[] numbers = {3,1,2,2,2,5,2,1,9,7};
Run Code Online (Sandbox Code Playgroud)

产量:6