20-算法训练 出现次数最多的整数

Posted zhumengdexiaobai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20-算法训练 出现次数最多的整数相关的知识,希望对你有一定的参考价值。

                        算法训练 出现次数最多的整数  
时间限制:1.0s   内存限制:512.0MB
    
  问题描述
  编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
  输入格式:第一行是一个整数NN? £? 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
  输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
样例输入
5
100
150
150
200
250
样例输出
150
 
注意:题目有一组恶心且垃圾的数据!!!
import java.util.HashMap;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin = new Scanner(System.in);
		int[] butong = new int[30];
		int[] cishu = new int[30];
		int n;
		n = cin.nextInt();
		
		if(n <= 0) {  //坑!!!!!!!!!!!!!智障吧,整数的个数还可能小于0!!!!
			return ;
		}
		
		int bt = 0, x;
//		HashMap<int, int> map = new HashMap<int, int>();
		HashMap<Integer, Integer> map = new HashMap<>();
		for(int i = 0; i < n; i++) {
			x = cin.nextInt();
			if(map.containsKey(x)) {
				map.put(x, map.get(x)+1);
			}
			else {
				map.put(x,1);
				butong[bt++] = x;
			}
		}
		int mx = -1;
		int mm = -0x3f3f3f3f;
		for(int i = 0; i < bt; i++) {
			int cii = map.get(butong[i]);
			if( cii > mx) {
				mx = cii;
				mm = butong[i];
			}
			if(cii == mx) {
				if(mm > butong[i]) {
					mm = butong[i];
				}
			}
		}
		System.out.println(mm);
	}

}

  

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int n = cin.nextInt();
		
		if(n <= 0) {  //坑!!!!!!!!!!!!!智障吧,整数的个数还可能小于0!!!!
			return ;
		}
		
		long x, cnt = 0, min = -0x3f3f3f3f;
		long bf = -0x3f3f3f3f;
		long dangci = 0;
		for(int i = 0; i < n; i++) {
			x = cin.nextLong();
			if(x == bf) {
				dangci++;
			}
			else {
				if(cnt < dangci) {
					cnt = dangci;
					min = bf;
				}
				else if(cnt == dangci && min > bf) {
					cnt = dangci;
					min = bf;
				}
				bf = x;
				dangci = 1;
			}
		}
		if(cnt < dangci) {
			cnt = dangci;
			min = bf;
		}
		else if(cnt == dangci && min > bf) {
			cnt = dangci;
			min = bf;
		}
		System.out.println(min);
	}
}

  

以上是关于20-算法训练 出现次数最多的整数的主要内容,如果未能解决你的问题,请参考以下文章

面试被虐如何只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数?

面试被虐如何只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数?

挑战程序员同学,如何只用2GB内存从20/40/80亿个整数中找到出现次数最多的数?

只用2GB内存在20亿个整数中找到出现次数最多的数

[算法]海量数据问题之一

找出一个数组中出现次数最多的那个元素。