这道题目由于不容易写测试用例,所以,可以把题目转换为:在一个数组中,有一个数字出现的次数超过了数组大小的一半,这和题目原意是一样的。

这道题目的思想是我们同时去掉数组中两个不一样的数字,那么,数组中原来存在的规律是不变的(仅针对这个题目)。

好吧,还是先给出函数声明:

/*2.3 寻找发帖水王*/
bool DutVerify(int*, int, int);
int DutFindNumMoreThanHalf(int*, int);

可以看到,函数声明中多了一个:DutVerify,这个函数的作用是验证,即我们一定可以在一个不为空的数组中找到一个数字,但是,我们不能说明这个数字出现的次数就超过了数组长度的一半,所以,考虑到算法的健壮性,我们还是需要最后验证一下。

由于注释都已经写在了代码里,这里不多做解释,贴代码吧:

/*验证有效函数*/
bool DutVerify(int* A, int size, int result)
{/*出现的次数*/int count = 0;for (int i = 0; i < size; ++i){if (A[i] == result)++count;}/*验证出现的次数是否大于数组长度的一半*/if (count > (size / 2))return true;elsereturn false;
}/*这个题目转换为数组中存在某一个数,这个数出现的次数大于数组中元素个数的一半*/
/*全局变量标识输入参数是否有效*/
bool _DutFindNumMoreThanHalf = false;
int DutFindNumMoreThanHalf(int* A, int size)
{if (!A || size <= 0){_DutFindNumMoreThanHalf = true;return -1;}int result;int count = 0;/**这里的思想是同时去掉两个不一样的数字,那么数组的“原型”不会改变,*即大于一半的那个数字在当前的数组中还是大于当前个数的一半*/for (int i = 0; i < size; ++i){if (count == 0){result = A[i];++count;}else{if (result == A[i])++count;else--count;}}/*当得到这个数字之后,我们需要验证这个数字是否出现的次数大于总个数的一半*/bool res = DutVerify(A, size, result);if (res == true)return result;else{_DutFindNumMoreThanHalf = true;return -1;}
}

编程之美2.3 寻找发帖水王相关推荐

  1. [编程之美] PSet2.3 寻找发帖“水王”

    问题描述: Tango是微软亚洲研究院的一个试验项目.研究院的员工和实习生们都很喜欢在Tango上面交流灌水.传说,Tango有一大"水王",他不但喜欢发贴,还会回复其他ID发的每 ...

  2. 编程之美2.10 寻找数组中的最大值和最小值

    这个问题其实很容易解决,就是循环遍历一遍数组,然后找到数组中存在的最大值和最小值就可以了,书中主要讨论的问题是比较次数较小的方法,不过,书中已经证明了,无论用什么方法最少的比较次数也就是循环遍历一遍的 ...

  3. 编程之美2.5 寻找最大的K个数

    在一个数组中寻找最大的K个数,我们首先说一种非常简单的方法,利用快速排序中的分割算法,即我们经常看见的partition.这个函数会返回一个 int 类型的值,这个值代表的是前一半数字和后一半数字的分 ...

  4. 编程之美2.10:寻找数组中的最大值和最小值

    编程之美2.10: 对于一个有N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来呢? 算法的思想是: 分而治之 测试数据:---------------------------------- ...

  5. 2017“编程之美”终章:AI之战勇者为王

    编者按:8月15日,第六届微软"编程之美"挑战赛在选手的火热比拼中圆满落下帷幕."编程之美"挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起, ...

  6. 编程之美2.1 求二进制中1的个数

    最近一段的时间,一直在看编程之美之类的算法书籍,刚开始看编程之美,感觉到难度太大,有时候也不愿意去翻动这本书,不过,经过一段时间的修炼,我也彻底的喜欢上这本书了, 书中的算法涉及到很多方面,树,链表, ...

  7. 编程之美-2.3-寻找发帖“水王”

    题目:寻找一个ID列表中,有一个ID超过了总数的一半,找出这个ID 分析: 可以对ID进行排序,因为需要寻找的ID超过了一半,所以该ID列表ID[N]中,ID[N/2]一定是这个ID值.复杂度为O(N ...

  8. Java 并发编程之美:并发编程高级篇之一-chat

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  9. Java 并发编程之美:并发编程高级篇之一

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

最新文章

  1. 算法基础知识科普:8大搜索算法之红黑树(上)
  2. POJ 2229 Sumsets
  3. TensorFlow:实战Google深度学习框架(四)MNIST数据集识别问题
  4. 关于 Docker ,你必须了解的核心都在这里了!
  5. STM32 - 定时器基础应用说明 - 04 - N-pulse waveform generation using one-pulse mode - 用OPM模式产生N次脉冲
  6. 测试上路2年,你处于什么阶段了?不醒着拼,你连应届生都比不过...
  7. java 注解校验_Java开发编写自定义校验注解和校验器
  8. flex布局 详细开发教程
  9. 水稻PHP基因,科学网—和驯化相关的水稻基因 - 闫双勇的博文
  10. 混合式教学模式在课堂中的应用
  11. vue项目前端页面模板,基于vue的前端模板
  12. 2019java后端面试集合篇最值得收藏的(一)
  13. c语言编程数的平方,C语言编程实例:由两个平方三位数获得三个平方二位数
  14. Sqlite锁与事务
  15. 蓝桥杯练习题 <座次问题> 排列型枚举 next_permutation
  16. uniapp中使用svga动画
  17. 针对腾讯云服务器 外网不能访问的问题
  18. Laravel 阿里大鱼短信接口
  19. 记一次 python 截取高低位(>> 和 运算符)
  20. 免费电子书下载网站,不来白嫖一波

热门文章

  1. javascript如何判断变量的数据类型
  2. Android studio听云接入另外一种方式
  3. 【Android】Eclipse自动编译NDK/JNI的三种方法
  4. ActiveX开发知多少?
  5. JVM内存管理------垃圾搜集器简介
  6. [BZOJ]4650 优秀的拆分(Noi2016)(哈希+二分)
  7. DJango_生命周期
  8. [linux]windows无法访问samba的安全性问题(关闭selinux)
  9. linux 查看剩余内存
  10. 模块化数据中心成未来互联网企业首选