<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">问题是这样的,有一组数,里面有各种数据,现在需要找出来一个数,它的出现的频率超过了一半。</span>
题目很简单,最直接的想法就是把数组排序,这样最中间的数肯定就是需要找的数。原理是这个数占了数组的一半,而且这个数所有的长度是超过了数组的一半大小,所以这个数无论从什么位置开始,都是要经过中间位置的数的。
代码如下:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int total = scanner.nextInt() * scanner.nextInt();
int[] input = new int[total];
for (int i = 0; i < total; i++) {
input[i] = scanner.nextInt();
}
Arrays.sort(input);
System.out.println(input[total / 2]);
}
}
}
import java.util.Scanner;
public class BigColor {
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
int index = 0;
int count = 0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
int x = sc.nextInt();
if(count==0)
{
index = x;
count++;
}
else
{
if(x==index)
count++;
else
count--;
}
}
}
System.out.println(index);
}
}
这样就找出了出现次数大于一半的那个数。
把这个问题隐身下:有三个数出现次数都是超出1/4的,问如何找出这三个数,思路是一样的,找出这三个数的话,就是每次都同样删除这三个数和一个不同于这三个数的数,最后剩余的数中有三个不同的数肯定就是所需要找到的三个数了。