【HDU - 1029】Ignatius and the Princess IV (水題)

Ignatius and the Princess IV c++

先搬中文spa

Descriptions:
 
給你n個數字,你須要找出出現至少(n+1)/2次的數字 如今須要你找出這個數字是多少?
Input

本題包含多組數據,請處理到EOF: 每組數據包含兩行。 第一行一個數字N(1<=N<=999999) ,保證N爲奇數。 第二行爲N個用空格隔開的整數。.net

Outputcode

對於每組數據,輸出一行,表示要求找到的那個數blog

Sample Inputip

5
1 3 2 3 3
11
1 1 1 1 1 5 5 5 5 5 5
7
1 1 1 1 1 1 1

Sample Outputci

3
5
1

題目連接:get

https://vjudge.net/problem/HDU-1029

it

找出數列裏面出現次數多於n/2的的元素io

既然次數大於n/2,那麼例如三、二、三、一、三、二、3

  1. 去掉3    2
  2. 去掉3    2
  3. 去掉3    1
  4. 還剩一個3

由此可得咱們按照序列一次掃描,把第一個數字x賦值給ans,計數器cnt=0

如果後來數字x與ans相同,則cnt++,不然cnt-- 若cnt爲0,則從新找(不用倒回開頭)以此循便可

AC代碼

 

#include <bits/stdc++.h>
#define Mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x, y) memset(x, y, sizeof(x))
#define Maxn 1000
using namespace std;
int main()
{
    int n,x,ans,cnt;
    while(cin>>n)
    {
        cnt=0;
        for(int i=0; i<n; i++)//存數
        {
            cin>>x;
            if(cnt==0)//計數器爲0,從新計數
            {
                ans=x;
                cnt=1;
            }
            else
            {
                if(ans==x)//相同,計數器+1
                    cnt++;
                else//不一樣-1
                    cnt--;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
相關文章
相關標籤/搜索