1. 程式人生 > >[luogu 2397] yyy loves Maths VI (mode) {眾數}

[luogu 2397] yyy loves Maths VI (mode) {眾數}

題目

https://www.luogu.org/problemnew/show/P2397


解題思路

因為這道題的空間很大。所以什麼諸如 m a p , h a s

h map,hash 之類的都不太管用。但是因為本題有一個特殊條件:眾數的數量一定是一半的。
所以我們可以維持一個當前的眾數,然後對新進來的這個數,判斷一下是否相同,如果相同,則記錄眾數數量的 s u m
sum
累加,否則逐減,當 s u m = 0 sum=0 時將新讀入的這個數當成
眾數
來處理


程式碼模擬

#include<cstdio>
using namespace std;
int n,ans,d,sum; 
int main()
{
	scanf("%d",&n); 
	while (n--){
		scanf("%d",&d); 
		if (!sum) ans=d,sum++; else d==ans?sum++:sum--; 
	}
	printf("%d",ans);
}