1 条题解

  • 0
    @ 2022-9-29 20:04:45

    计数排序法

    #include<bits/stdc++.h>
    using namespace std;
    const int BASE = 50;
    int n;
    int a[1005];
    int cnt[105];//i出现的次数存在 cnt[i+BASE] 
    int main()
    {
    	//输入 
    	cin>>n;
    	for(int i=1;i<=n;i++)
    		cin>>a[i];
    	//计数
    	for(int i=1;i<=n;i++)
    	{
    		//a[i] 的出现次数 ++
    		cnt[a[i]+BASE]++;	
    	} 
    	//找最大值
    	for(int i=-50;i<=50;i++){
    		if(cnt[i+BASE]*2>n){
    			cout<<i<<"\n";	
    			return 0;
    		}
    	} 
    	cout<<"no\n";
    	return 0;
    }
    
    

    摩尔投票法

    #include <bits/stdc++.h>
    using namespace std;
    int n, x;
    int a[1005];
    int main()
    {
        cin >> n;
        int ans = 100, cnt = 0;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i];
            if (a[i] == ans)
                cnt++;
            else if(cnt > 0)
                cnt--;
            else
            {
                ans = a[i];
                cnt = 1;
            }
        }
        // 验证
        cnt = 0;
        for(int i = 1; i <= n; i++)
            if (a[i] == ans)
                cnt ++;
        if (cnt * 2 > n)
            cout << ans;
        else
            cout << "no";
        return 0;
    }
    
    • 1

    信息

    ID
    406
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    (无)
    递交数
    97
    已通过
    32
    上传者