计算每个'的出现次数。数组中的数字

时间:2015-04-20 07:32:56

标签: java

到目前为止,我只得到了可以计算数组数组中某个特定值的部分。但是,我想知道如何发生每一个'数组中的数字并显示它们。

以下是我的代码 -

public class CIS3618thAssignment
{
    public static void main(String[] args) {
    int[] randomNumbers = new int[100];

    for(int index = 0; index < randomNumbers.length; index++)
    {
        randomNumbers[index] = (int) (Math.random()*100);
    }

    for(int index = 0; index < randomNumbers.length; index++)
    {
        System.out.println(randomNumbers[index]);
    }
    System.out.println("Occurrence of 2 is " + GetOccurrence(2, randomNumbers, 0, randomNumbers.length));
}
public static int GetOccurrence(int k, int[] numbers, int startIndex, int endIndex)
{
    if(endIndex<startIndex)
        return 0;
    if(numbers[startIndex]>k)
        return 0;
    if(numbers[endIndex]<k)
        return 0;
    if(numbers[startIndex]==k && numbers[endIndex]==k)
        return endIndex-startIndex +1;

    int midInd = (startIndex+endIndex)/2;
    if(numbers[midInd]==k)
        return 1+GetOccurrence(k, numbers, startIndex, midInd-1) +     GetOccurrence(k, numbers, midInd+1,endIndex);
    else if(numbers[midInd]>k)
    return GetOccurrence(k, numbers, startIndex, midInd-1);
else
    return GetOccurrence(k, numbers, midInd+1, endIndex);
 }
}

所以,在源代码中,我只能从数组中获得value = 2的出现。

4 个答案:

答案 0 :(得分:1)

通过阅读您的代码,您似乎正在尝试通过二进制搜索找到该元素?但是你知道二进制搜索适用于排序数组。我在代码中没有看到排序部分。

根据您的要求,为什么不建立Map<Integer,Integer>密钥是数字,值是出现?它使您的实现更容易。

答案 1 :(得分:1)

您可以使用HashMap,其中key为number,value为出现次数。

迭代数组,如果键(数字)已经存在,则增加值(出现次数)。否则,添加新密钥并将其值设置为1。

答案 2 :(得分:0)

将此行放入循环中:

System.out.println("Occurrence of 2 is " + GetOccurrence(2, randomNumbers, 0, randomNumbers.length));

并按如下方式更改:

for(int index = 0; index < randomNumbers.length; index++) {
    System.out.println("Occurrence of " + randomNumbers[index] + " is " + GetOccurrence(randomNumbers[index], randomNumbers, 0, randomNumbers.length));
}

答案 3 :(得分:0)

Check this DEMO.

我想你想要的......

我没有在你的代码中使用Map或递归,重要的是for循环来计算这个:

int[] results = new int[100];

// fill map with results
for(int index = 0; index < randomNumbers.length; index++)
{
    // if number on randomnumbers is 2, this line sum +1 in position 2 of the array
    results[randomNumbers[index]] = results[randomNumbers[index]] + 1;
}