Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-在排序数组中查找最小公共整数_Java_Arrays_Sorting - Fatal编程技术网

Java-在排序数组中查找最小公共整数

Java-在排序数组中查找最小公共整数,java,arrays,sorting,Java,Arrays,Sorting,我被分配了一道程序设计题做作业,现在我处于停滞状态。我今天已经搜索了好几个小时,试图找到一个答案,但似乎这里从来没有人问过这个问题。我基本上需要找到阵列模式的相反方向。以下是我被要求寻找解决方案的问题: LeastFrequent-输出沿路径最不频繁出现的整数 其出现计数来自输入的10个整数列表 System.in。如果列表中出现多个整数的频率最低, 输出最不频繁出现的任何整数。说出你的班级 最少的人。您可以假设所有10个整数都在该范围内 -100到100,包括在内 以下是我目前掌握的代码: p

我被分配了一道程序设计题做作业,现在我处于停滞状态。我今天已经搜索了好几个小时,试图找到一个答案,但似乎这里从来没有人问过这个问题。我基本上需要找到阵列模式的相反方向。以下是我被要求寻找解决方案的问题:

LeastFrequent-输出沿路径最不频繁出现的整数 其出现计数来自输入的10个整数列表 System.in。如果列表中出现多个整数的频率最低, 输出最不频繁出现的任何整数。说出你的班级 最少的人。您可以假设所有10个整数都在该范围内 -100到100,包括在内

以下是我目前掌握的代码:

package leastfrequent;
import java.util.*;

public class LeastFrequent
{
    private static int[] arr = new int[10];
    private static int minValue;
    private static int minCount;

    public static void leastCommon()
    {
        for(int i = 0; i < arr.length; i++)
        {
            int count = 0;

            for(int j = 0; j < arr.length; j++)
            {
                if(arr[j] == arr[i]) 
                {
                    count++;
                }
            }

            if(count > minCount)
            {
                minCount = count;
                minValue = arr[i];
            }
        }
    }

    public static void main(String[] args)
    {
        Scanner stdin = new Scanner(System.in);
        System.out.print("numbers: ");

        for(int i = 0; i < arr.length; i++)
        {
            arr[i] = stdin.nextInt();
        }

        Arrays.sort(arr);
        leastCommon();

        System.out.println("least frequent: " + minValue + " occurs " + minCount + " times");
    }
}
package leastfrequent;
导入java.util.*;
公务舱租客
{
私有静态int[]arr=新int[10];
私有静态int值;
私有静态int minCount;
公共静态void leastCommon()
{
对于(int i=0;i最小计数)
{
minCount=计数;
最小值=arr[i];
}
}
}
公共静态void main(字符串[]args)
{
扫描仪标准输入=新扫描仪(System.in);
系统输出打印(“数字:”);
对于(int i=0;i
基本上,我认为如果我能找到模式,我可以反转算法,找到最不常见的模式,但这不起作用,因为它总是读取零

有人有什么想法吗


请帮忙

想想你用纸和笔是怎么做到的

  • 计算每个数字在数组中出现的次数
  • 找到最小的计数
  • 返回与该计数对应的值。这要求您以某种方式存储映射到其计数的值

  • 数组已排序这一事实允许您通过寻找相等数的最短连续运行来优化此算法。这意味着您可以使用辅助内存在一次传递中完成此操作。

    由于范围为[-100100],因此可以使用长度为201的辅助数组

    int[] counters = new int[201];
    
    假设用户输入-59,增加特定计数器: (你应该在输入的数字上加上100来查找索引,想想-100在索引0处)

    然后迭代计数器数组并找到最小的非零元素。 从这个指数中减去100,这肯定是最不频繁的数字

    int  min = Integer.MIN_VALUE;
    
    for(int i: counters)
    {
       if(i != 0 && i < min)
         min = i;
    }
    
    int min=Integer.min\u值;
    用于(int i:计数器)
    {
    如果(i!=0&&i
    现在,这意味着
    计数器[i]
    出现的频率最低,对应于
    (i-100)
    实际值。

    两个变化:

  • 使用最大索引(即10)初始化
    minCount

    private static int minCount = 10;
    
  • if
    更改为与
    小于
    进行比较,以代替
    大于
    ,如下所示:

    if(count < minCount){
    
    if(计数
  • 通过这种方式,您将使用较低的计数更改
    minCount
    ,无论何时您收到较低的发生计数,并且最终,它将拥有最少的发生计数。


    我想,rest很好。希望这能修复你的程序。

    你能使用映射结构还是普通数组?我如何在计数器数组中找到最不常见的数?@user1862003这是数组的最小值。呜呜,当我发表评论时,最后一部分不在。我将尝试实现这一点。谢谢!我遵循了这一点,但另一个answer变得更简单了!谢谢你的帮助!谢谢!!!我错过的部分是=10…这个简单的修复完成了!!!我真的很感激。
    if(count < minCount){