查找输入数组的多数元素的程序不起作用
Program to find majority element of an input array doesn't work
我正在尝试使用 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,000,000 个元素的数组的多数元素为零:仅设置了最初的三或四个项目,而其余项目被零占据 - 默认值为Java.
中的 int
输入长度后,通过按大小分配来解决此问题。您还需要修复读取输入的代码,以确保数据最终位于索引 0..numberOfLine-1
:
Scanner sc = new Scanner (System.in);
// User input n number of lines
int numberOfLine = sc.nextInt();
int a[] = new int [numberOfLine];
//Loop to have n elements as input
for (int i = 0 ; i < numberOfLine ; i++) {
a[i] = sc.nextInt();
}
我正在尝试使用 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,000,000 个元素的数组的多数元素为零:仅设置了最初的三或四个项目,而其余项目被零占据 - 默认值为Java.
中的int
输入长度后,通过按大小分配来解决此问题。您还需要修复读取输入的代码,以确保数据最终位于索引 0..numberOfLine-1
:
Scanner sc = new Scanner (System.in);
// User input n number of lines
int numberOfLine = sc.nextInt();
int a[] = new int [numberOfLine];
//Loop to have n elements as input
for (int i = 0 ; i < numberOfLine ; i++) {
a[i] = sc.nextInt();
}