zoukankan      html  css  js  c++  java
  • 一本通1186 出现次数超过一半的数(类似桶排序)

    【题目描述】

    给出一个含有n(0 < n ≤ 1000)个整数的数组,请找出其中出现次数超过一半的数。数组中的数大于-50且小于50。

    【输入】

    第一行包含一个整数n,表示数组大小;

    第二行包含n个整数,分别是数组中的每个元素,相邻两个元素之间用单个空格隔开。

    【输出】

    如果存在这样的数,输出这个数;否则输出no。

    【输入样例】

    3
    1 2 2

    【输出样例】

    2



    代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    int main()
    {
    int n;
    cin>>n;
    int a[n],f[101]={};//根据取值范围定义101数组
    for(int i=0;i<n;i++)
    {
    cin>>a[i];//输入数值
    f[a[i]+50]++;//桶排序的精髓,对应数的桶里个数加1。这里有一个细节,就是我加了50,因为每个数的数据范围在-50到50之间,但是整型数组是没有负数号的,所以我加50存下来
    }
    for(int i=0;i<n;i++)
    {
    if(f[a[i]+50]>n/2)//如果这个数超过一半,则输出,并结束
    {
    cout<<a[i];
    return 0;
    }
    }
    cout<<"no";//如果没有结束,就输出“no”
    return 0;
    }

  • 相关阅读:
    day 05 讲解java三大特性
    day 02 运算符
    石大 6-9 待提交
    poj分类
    NLog使用总结
    VS 2010下单元测试
    MQTT----物联网常用的消息队列协议
    使用jfreechart生成柱状图、折线图、和饼状图
    JavaBean持久化
    使用maven搭建springMVC开发环境
  • 原文地址:https://www.cnblogs.com/57xmz/p/12590339.html
Copyright © 2011-2022 走看看