简体   繁体   中英

Count of most occurring digit… Find the digit that occurs most in a given number

the following s the code to Find the number of occurrences of a given digit in a number.wat shall i do in order to Find the digit that occurs most in a given number.(should i create array and save those values and then compare) can anyone please help me ..

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*/

declare a count[] array

and change your find function to something like

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

then find the largest item in count[]

O(n)
  1. keep int digits[] = new int[10];
  2. every time encounter with digit i increase value of digits[i]++
  3. the return the max of digits array and its index. that's all.

Here is my Java code:

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;
}

and here are some tests

System.out.println(countMaxOccurence("12365444433212"));
System.out.println(countMaxOccurence("1111111"));
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;
}}

The above code returns the digit that occur the most in a given number. If there is no such digit, it will return -1 (ieif there are 2 or more digits that occurs same number of times then -1 is returned. For eg if 323277 is passed then result is -1). Also if a number with single digit is passed then number itself is returned back. For eg if number 5 is passed then result is 5.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM