如何计算Java中可能具有相同计数的重复次数最多的值

如何计算Java中可能具有相同计数的重复次数最多的值,java,arrays,performance,counting,Java,Arrays,Performance,Counting,我已经输入了这个值 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String lines = br.readLine(); String[] strs = lines.trim().split(""); int x = 0; int[] numbers = new int[strs.length]; for (int i = 0; i <

我已经输入了这个值

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String  lines = br.readLine();
    String[] strs = lines.trim().split("");
    int x = 0;
    int[] numbers = new int[strs.length];
    for (int i = 0; i < strs.length; i++) {
        numbers[i] = Integer.parseInt(strs[i]);
    }
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
字符串行=br.readLine();
字符串[]strs=lines.trim().split(“”);
int x=0;
int[]数字=新的int[strs.length];
对于(int i=0;i
我已经把它分类了

   int temp = 0;
    for (int i=0; i < numbers.length; ++i) {
        for (int j=1; j < (numbers.length - i); ++j) {
            if (numbers[j-1] > numbers[j]) {
                temp = numbers[j-1];
                numbers[j-1] = numbers[j];
                numbers[j] = temp;
            }
        }
    }
int-temp=0;
对于(int i=0;i数字[j]){
温度=数字[j-1];
数字[j-1]=数字[j];
数字[j]=温度;
}
}
}

问题就在这里

    int numDup = 0, dupCount = 1, maxCount = 0;
    int previous = -1;
    for (int i=0; i < numbers.length; ++i) {
        if (numbers[i] == previous) {
            ++numDup;
            if(maxCount < numDup){
                maxCount = numDup;
                dupCount = 1;
            }
            else {
                dupCount += 1;
            }
        }
        else {
            previous = numbers[i];
            numDup = 1;
        }
    }
    if(dupCount >= 2){
        System.out.println("more");
    }
    else{
        System.out.println(dupCount);
    }
int numDup=0,dupCount=1,maxCount=0;
int-previous=-1;
对于(int i=0;i=2){
System.out.println(“更多”);
}
否则{
系统输出打印项次(重复计数);
}

问题是我没有使用dupCount来计算重复次数最多的值,如果>=2是“更多”。 但是程序运行不正确

我喜欢的示例程序

输入=5//输出=5

输入=111222333//输出=3

输入=01223605504//输出=0

输入=10003444//输出=更多

有两个问题

  • 在for循环中,您使用的是++i而不是i++
  • 您需要else if块,而不是maxCount==numDup的else,然后DUPCUNT应该增加
  • int numDup=0,dupCount=1,maxCount=0;
    int-previous=-1;
    for(int i=0;i=2){
    System.out.println(“更多”);
    }
    否则{
    系统输出打印项次(重复计数);
    }
    
    有两个问题

  • 在for循环中,您使用的是++i而不是i++
  • 您需要else if块,而不是maxCount==numDup的else,然后DUPCUNT应该增加
  • int numDup=0,dupCount=1,maxCount=0;
    int-previous=-1;
    for(int i=0;i=2){
    System.out.println(“更多”);
    }
    否则{
    系统输出打印项次(重复计数);
    }
    
    您可以使用
    Map
    Collections
    轻松完成。以下是带有样本测试的程序:

    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Main {
        public static void main(String args[]) {
            printDupCount("5");
            printDupCount("1123321233");
            printDupCount("01223605504");
            printDupCount("10440034");
        }
    
        static void printDupCount(String lines) {
            String[] strs = lines.trim().split("");
            int[] numbers = new int[strs.length];
            for (int i = 0; i < strs.length; i++) {
                numbers[i] = Integer.parseInt(strs[i]);
            }
    
            // Put the count of each number into a map
            Map<Integer, Integer> groupMap = new HashMap<Integer, Integer>();
            for (int n : numbers) {
                if (groupMap.containsKey(n))
                    groupMap.put(n, groupMap.get(n) + 1);
                else
                    groupMap.put(n, 1);
            }
    
            // Find the maximum count
            Map.Entry<Integer, Integer> maxEntry = null;
            for (Map.Entry<Integer, Integer> entry : groupMap.entrySet()) {
                if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0) {
                    maxEntry = entry;
                }
            }
    
            // Find the frequency of maximum count
            int freq = Collections.frequency(groupMap.values(), maxEntry.getValue());
    
            // Check if the frequency of maximum count matches with that of any other count
            boolean more = false;
            for (Map.Entry<Integer, Integer> entry : groupMap.entrySet()) {
                if (freq == Collections.frequency(groupMap.values(), entry.getValue())
                        && entry.getValue() != maxEntry.getValue()) {
                    more = true;
                    break;
                }
            }
    
            // Print the result
            if (more) {
                System.out.println("More");
            } else {
                System.out.println(maxEntry.getKey());
            }
        }
    }
    
    注意:

    5
    3
    0
    More
    
  • 您不需要使用此解决方案对数字数组进行排序
  • 该逻辑在
    Map
    属性上工作,根据该属性,如果将具有现有键的新条目放入it中,它将替换现有条目

  • 其余的逻辑是直截了当的。此外,我在代码中添加了重要的注释,以使代码更易于理解。如果有任何疑问,请随时发表评论。

    您可以使用
    Map
    Collections
    轻松进行评论。以下是带有样本测试的程序:

    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Main {
        public static void main(String args[]) {
            printDupCount("5");
            printDupCount("1123321233");
            printDupCount("01223605504");
            printDupCount("10440034");
        }
    
        static void printDupCount(String lines) {
            String[] strs = lines.trim().split("");
            int[] numbers = new int[strs.length];
            for (int i = 0; i < strs.length; i++) {
                numbers[i] = Integer.parseInt(strs[i]);
            }
    
            // Put the count of each number into a map
            Map<Integer, Integer> groupMap = new HashMap<Integer, Integer>();
            for (int n : numbers) {
                if (groupMap.containsKey(n))
                    groupMap.put(n, groupMap.get(n) + 1);
                else
                    groupMap.put(n, 1);
            }
    
            // Find the maximum count
            Map.Entry<Integer, Integer> maxEntry = null;
            for (Map.Entry<Integer, Integer> entry : groupMap.entrySet()) {
                if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0) {
                    maxEntry = entry;
                }
            }
    
            // Find the frequency of maximum count
            int freq = Collections.frequency(groupMap.values(), maxEntry.getValue());
    
            // Check if the frequency of maximum count matches with that of any other count
            boolean more = false;
            for (Map.Entry<Integer, Integer> entry : groupMap.entrySet()) {
                if (freq == Collections.frequency(groupMap.values(), entry.getValue())
                        && entry.getValue() != maxEntry.getValue()) {
                    more = true;
                    break;
                }
            }
    
            // Print the result
            if (more) {
                System.out.println("More");
            } else {
                System.out.println(maxEntry.getKey());
            }
        }
    }
    
    注意:

    5
    3
    0
    More
    
  • 您不需要使用此解决方案对数字数组进行排序
  • 该逻辑在
    Map
    属性上工作,根据该属性,如果将具有现有键的新条目放入it中,它将替换现有条目

  • 其余的逻辑是直截了当的。此外,我在代码中添加了重要的注释,以使代码更易于理解。如果有任何疑问,请随时发表评论。

    谢谢,但我会在他们遇到新的most时重置dupCount,因此我使用dupCount来确定有多少。10003444因为0和4相等,所以需要“更多”。但如果Ex.是111222333,那么它应该只有3。无法理解要求。请举例说明。1112223333应该只有3,请解释因为最大计数值是3,我只需要最大计数值。您正在打印dupCount,那么它应该是1,对吗?谢谢,但我在遇到新的最大值时重置了dupCount,所以我使用dupCount来确定有多少个。10003444因为0和4相等,所以需要“更多”。但如果Ex.是111222333,那么它应该只有3。无法理解要求。请举例说明。1112223333应该只有3,请解释因为最大计数值是3,我只需要最大计数值。您正在打印dupCount,那么它应该是1,对吗?提示。。。学习使用调试器或简单的打印语句来准确理解代码正在执行的操作。然后将其与你的想法相匹配,看看它应该做什么!提示。。。学习使用调试器或简单的打印语句来准确理解代码正在执行的操作。然后将其与你的想法相匹配,看看它应该做什么!