最常出现的数字的计数...找到给定数字中出现次数最多的数字

时间:2011-01-21 05:07:30

标签: java arrays algorithm string

以下是代码 找到number中给定数字的出现次数。我应该怎样做才能找到给定数字中出现次数最多的数字。(我应该创建数组并保存这些数据然后进行比较) 任何人都可以帮助我..

import java.util.*;
public class NumOccurenceDigit 
{
    public static void main(String[] args) 

        {
            Scanner s= new Scanner(System.in);

            System.out.println("Enter a Valid Digit.(contaioning only numerals)");
            int number = s.nextInt();
            String numberStr = Integer.toString(number);
            int numLength = numberStr.length();

            System.out.println("Enter numer to find its occurence");
            int noToFindOccurance = s.nextInt();
            String noToFindOccuranceStr = Integer.toString(noToFindOccurance);
            char noToFindOccuranceChar=noToFindOccuranceStr.charAt(0);

            int count = 0;
            char firstChar = 0;
            int i = numLength-1;
            recFunNumOccurenceDigit(firstChar,count,i,noToFindOccuranceChar,numberStr);

    }
    static void recFunNumOccurenceDigit(char firstChar,int count,int i,char noToFindOccuranceChar,String numberStr)
    {

        if(i >= 0)
        {
            firstChar = numberStr.charAt(i);
            if(firstChar == noToFindOccuranceChar)
            //if(a.compareTo(noToFindOccuranceStr) == 0)
            {
                count++;

            }
            i--;
            recFunNumOccurenceDigit(firstChar,count,i,noToFindOccuranceChar,numberStr);
        }
        else
        {
            System.out.println("The number of occurance of the "+noToFindOccuranceChar+" is :"+count);
            System.exit(0);
        }
    }
}


/*
 * Enter a Valid Digit.(contaioning only numerals)
456456
Enter numer to find its occurence
4
The number of occurance of the 4 is :2*/

3 个答案:

答案 0 :(得分:2)

声明count []数组

并将您的查找功能更改为

//for (i = 1 to n)
{
     count[numberStr.charAt(i)]++;
}

然后找到count []

中的最大项目

答案 1 :(得分:2)

O(n)
  1. 保持int digits[] = new int[10];
  2. 每次遇到digit i增加值digits[i]++
  3. 返回最大数字数组及其索引。就是这样。
  4. 这是我的Java代码:

    public static int countMaxOccurence(String s) {
        int digits[] = new int[10];
    
        for (int i = 0; i < s.length(); i++) {
            int j = s.charAt(i) - 48;
            digits[j]++;
        }
    
        int digit = 0;
        int count = digits[0];
        for (int i = 1; i < 10; i++) {
            if (digits[i] > count) {
                count = digits[i];
                digit = i;
            }
        }
    
        System.out.println("digit = " + digit + "  count= " + count);
        return digit;
    }
    

    这是一些测试

    System.out.println(countMaxOccurence("12365444433212"));
    System.out.println(countMaxOccurence("1111111"));
    

答案 2 :(得分:0)

public class Demo{
public static void main(String[] args) {
    System.out.println("Result: " + maxOccurDigit(327277));
}

public static int maxOccurDigit(int n) {
    int maxCount = 0;
    int maxNumber = 0;
    if (n < 0) {
        n = n * (-1);
    }

    for (int i = 0; i <= 9; i++) {
        int num = n;
        int count = 0;
        while (num > 0) {
            if (num % 10 == i) {
                count++;
            }
            num = num / 10;
        }
        if (count > maxCount) {
            maxCount = count;
            maxNumber = i;
        } else if (count == maxCount) {
            maxNumber = -1;
        }
    }
    return maxNumber;
}}
  

上面的代码返回在给定数字中出现次数最多的数字。如果没有这样的数字,它将返回-1(即,如果有2个或更多的数字出现相同的次数,则返回-1。例如,如果通过了323277,则结果为- 1)。同样,如果传递了一位数字,则数字本身将返回。 例如,如果通过了数字5,则结果为5。