文章

84

粉丝

408

获赞

31

访问

832.2k

头像
数字模式的识别(c++)
P1057
发布于2020年7月19日 09:53
阅读数 9.0k

看到这题,首先想到的是,利用数组存所有可能的数字,数组下标对应数字,元素值对应其出现的次数。但题目中|input_number| <= 2000000,所以这样做带来的空间开销太大了。

于是,换了一种思路,用数组存下所有的数,然后进行升序排列,记录下每个元素出现的次数,并不断更新模式最大的数字,这样求出来的便是数值最小、模式最多的数字。

#include<iostream>
#include<algorithm>
using namespace std;
int cmp(const void* a, const void* b)
{
	return *(int*)a - *(int*)b;
}
int main()
{
	int N;
	cin >> N;
	int* num = new int[N];
	for (int i = 0; i < N; i++) {
		cin >> num[i];
	}
	qsort(num, N, sizeof(num[0]), cmp);
	int ans = num[0], maxc = 1;//记录次数最多的数字和模式 
	int tmp = num[0], count = 1;//记录当前数字及其模式 
	for (int i = 1; i < N; i++) {
		if (num[i] == tmp) {
			count++;
		}
		else {
			if (count > maxc) {//更新最多的数字及其模式 
				ans = tmp;
				maxc = count;
			}
			tmp = num[i];
			count = 1;
		}
	} 
	cout << ans << endl;
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发