LeastFrequent - 从System.in输入的10个整数的列表中输出最不频繁出现的整数及其出现次数。如果列表中的多个整数出现频率最低,则输出最不频繁出现的任何整数。将您的班级命名为LeastFrequent。您可以假设所有10个整数都在-100到100的范围内。
import java.util.*;
public class LeastFrequent
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int[] arr = new int[10];
int[] hold = new int[300];
int x = 0;
int count = 0;
int a = 1;
int least = 0;
System.out.print("numbers: ");
//adds 10 numbers to an array and counts occurrence
for(int i=0;i<arr.length;i++)
{
arr[i] = scan.nextInt();
hold[arr[i]]++;
}
for(int i=0;i<hold.length;i++)
{
if(hold[i] > 0)
{
}
}
System.out.println("least frequent: " + count + " occurs " + arr[count] + " times");
}
}
我要求用户输入10个整数并将其放入数组中。 我也计算输入数字的出现并将其存储在另一个数组中。 我坚持寻找最不频繁的一个。 我知道我需要再次扫描第二个阵列,我不知道如何。 关于如何在跳过等于0的值时比较第二个数组的元素值的任何想法?
答案 0 :(得分:3)
首先,以下内容并不完全正确:
hold[arr[i]]++
如果我输入-1
会怎样?
对于找到最少出现的元素,您需要找到hold
中大于零的最小值。在迭代hold
时,您可以跟踪到目前为止看到的最小值和索引。
最后,问题的另一种方法是对数组进行排序。执行此操作后,相同的值将彼此相邻。这简化了重复次数的计算。
答案 1 :(得分:0)
你必须找到min:
int min = hold[0]; // Mark the first position as min
int pos = 0;
for(int i=1;i<hold.length;i++)
{
if(hold[i] < min) // if the current position have less frequency
{
min = hold[i]; // save is frequency
pos = i; // and is position
}
}