查找输入数组的多数元素的程序不起作用

时间:2018-09-05 13:56:12

标签: java boyer-moore

我正在尝试使用博耶和摩尔方法来找到多数因素。该程序应要求用户在第一行中输入“ n”行,然后在“ n”行之后输入“ n”个数字。 (例如:用户在第一行输入5,那么后面将有5个数字) 接下来,使用Boyer和Moore方法查找输入数组的多数元素。如果输入数组中不存在多数元素,则执行-1。无论我输入了什么输入,我的程序输出都显示为0。您能检查一下并更正我的程序吗?

输出示例: 4 12 12 1个 12 12 /或:3 11 2 13 -1

public static void main (String[]args)
{
    int a[] = new int [1000000];
    Scanner sc = new Scanner (System.in);

    // User input n number of lines
    int numberOfLine = sc.nextInt();

    //Loop to have n elements as input
    for (int i = 1; i<= numberOfLine; i++)
    {
        a[i] = sc.nextInt();
    }

    // Call method to display majority element
    getMajorityElement(a);
    sc.close();
}       

//Method to Find M.E using Boyer & Moore approach
public static void getMajorityElement(int [] array)
{
    int majorityElement = array[0];
    int count = 1;
    for (int index = 1; index<array.length; index++)
    {
        if(majorityElement==array[index])
        {
            count++;
        }
        else if(count==0)
        {
            majorityElement = array[index];
            count = 1;
        }
        else 
        {
            count --;
        }
    }

    // Check if candidate M.E occur more than n/2 times
    count = 0;
    for (int index = 0; index<array.length; index++)
    {
        if(array[index]==majorityElement)
            {
            count++;
            }
    }
        if (count > array.length/2)
        {
        System.out.println(majorityElement);
        }
        else
        {
        System.out.println("-1");
        }
}

1 个答案:

答案 0 :(得分:1)

出现此现象的原因是,您的1,000,000个元素的数组的多数元素为零:仅设置了初始的三或四个项目,而其余项目则被零占据-{的默认值{1}}(Java)。

输入长度后,通过分配大小来解决此问题。您还需要修复读取输入的代码,以确保数据以索引int结尾:

0..numberOfLine-1