数组中出现次数一半以上的数

在数组中找到出现次数大于一半的数

http://www.nowcoder.com/questionTerminal/6a406a24b2a14954956a2168e7f42f9d

消消乐解法:
每当与之前一个相等 count++
每当与之前一个不等 count--
若当前count==0 那么新来的作为全新Num count=1

int main()
{
    int n;
    cin>>n;
    vector<int> arr(n);
    for(int i=0;i<n;i++)
        cin>>arr[i];   //输入
    int num=arr[0];
    int ans=1;
    //假定那个数为arr[0]
    for(int i=1;i<n;i++)
    {
        if(ans==0)  //转变新的num
        {
            num=arr[i];
            ans++;
            continue;
        }
        if(arr[i]==num)
        {
            ans++;
        }
        else
        {
            ans--;
        }  
    }
    int count=0;
    for(int i=0;i<n;i++)
        if(arr[i]==num)
            count++;
    if(count>n/2)
        cout<<num<<endl;
    else
        cout<<-1<<endl;

}
全部评论

相关推荐

草稿猫编程:查看图片
点赞 评论 收藏
分享
02-22 21:16
已编辑
门头沟学院 运营
牛客928043833号:离了你谁还拿我当个宝
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务