超半的数

超半的数

https://ac.nowcoder.com/acm/problem/22222

  • 题目描述
    给你n个数,有一个数的出现次数超过一半,请找出这个数。

  • 输入描述:
    输入两行。
    第一行包含一个整数n
    第二行包含n个整数ai
    1 <= n <= 1000, 1 <= ai <= 1e9

  • 输出描述:
    输出一行,包含一个整数。

  • 解题思路:
    思路一:排序,由于 n 个数必有一个数出现次数超过一半,因此将 n 个数排序完后,位于中间的数即为所求结果。排序时间复杂度为:图片说明
    思路二:摩尔投票法,设置一个计数器 count初值为1,选择第一个数作为备选结果放入 res 中。从第二个数开始遍历,若 arr[i] == res,则 count++,否则 count--。当 count == 0 时,将 res 换成当前遍历的数 arr[i]。重复这个过程直至结束。则最终在 res 存的数则为所求结果。时间复杂度为:图片说明
    可以这样想,由于 n 个数中必有一个数 x 的次数超过一半,则将所有的 x 与剩余的数作抵消,则 x 必有剩余,至少剩余1个 x 。因此,即使在遍历过程中遇到,res 中的数为所求结果,但刚好 count == 0,也不用担心,就算 res 发生了变化,到最后 res 中的数也必然是正确结果。

  • C# 代码:

    using System;
    class Program{
      static void Main(){
          string input;
          string[] tokens;
          while((input = Console.ReadLine()) != null){
              int n = int.Parse(input);
              input = Console.ReadLine();
              tokens = input.Split();
              int[] arr = new int[n];
              for(int i = 0; i < n; i++) arr[i] = int.Parse(tokens[i]);
              int count = 1;
              int res = arr[0];
              for(int i = 1; i < n; i++){
                  if(res == arr[i]) count++;
                  else count--;
                  if(count == 0){
                      res = arr[i];
                      count = 1;
                  }
              }
              Console.WriteLine(res);
          }
      }
    }
全部评论

相关推荐

07-09 18:33
门头沟学院 Java
这么逆天每年都有人去???&nbsp;填多益网申就是大型的服从性测试
鲁大牛:辅导员在群里发了这个公司我就申了一下。网申居然要写当场开摄像头写两篇不少于三百字的作文。太逆天了
点赞 评论 收藏
分享
来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务