数组中出现次数超过一半的数字
来源:互联网 发布:五年目的放课后淘宝 编辑:程序博客网 时间:2024/05/18 07:28
/*数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,输出2.*/#include "iostream"#include "map"using namespace std;void MoreThanHalfNum0(int* numbers, int len){if (numbers == NULL || len <= 0)return;map<int, int> count;for (int i = 0; i < len; i++)count[numbers[i]]++;int maxCount = 0;int value;for (map<int, int>::iterator iter = count.begin(); iter != count.end(); iter++){if (iter->second > maxCount){maxCount = iter->second;value = iter->first;}}if (maxCount * 2 > len)cout << value;elsecout << "No number appearing more than half the length of the array." << endl;}//方法二:基于partition算法,找中位数。//算法前提:如果存在,排序后一定是中位数。先基于快排的思想找出中位数,//再验证该数字出现次数是否大于长度一半。(实现略)bool checkMoreThanHalf(int* numbers, int len, int value){int times = 0;for (int i = 0; i < len; i++)if (numbers[i] == value)times++;if (times * 2 >= len)return true;elsereturn false;}//方法三:该数字出现次数比其他数字出现次数和还要多。void MoreThanHalfNum2(int* numbers, int len){if (numbers == NULL || len <= 0)return;int num = numbers[0];int numCount = 1;for (int i = 1; i < len; i++){if (numCount == 0){numCount = 1;num = numbers[i];}else if (numbers[i] == num)numCount++;else{numCount--;}}if (!checkMoreThanHalf(numbers, len, num))cout << "No number appearing more than half the length of the array." << endl;elsecout << num << endl;}void test(){int a[] = { 1, 2, 3, 2, 2, 2, 5, 4, 2 };MoreThanHalfNum0(a, sizeof(a) / sizeof(int));}int main(){test();return 0;}
0 0
- 数组中超过出现次数超过一半的数字
- 74.数组中超过出现次数超过一半的数字
- 74 数组中超过出现次数超过一半的数字
- 【数组4】数组中出现次数超过一半的数字
- 数组4:数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 找出数组中出现次数超过长度一半的数字
- 2-数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字[算法]
- 数组中出现次数超过一半的数字
- 找出数组中出现次数超过一半的数字--百度
- 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 寻找数组中出现次数超过一半的数字
- 面试训练数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 在Eclipse添加Android兼容包( v4、v7 appcompat )
- Centos7.0环境部署文档
- 技术盛典,2016AppCan移动开发者大会即将开启
- 对象调用Close 方法和null的分别
- linux驱动---字符设备的注册register_chrdev说起
- 数组中出现次数超过一半的数字
- 调用摄像头拍照
- 一步步学spark之一scala类的定义(属性和方法)2.0
- 计算机视觉研究群体及专家主页汇总
- 安卓Fragment使用详解
- PG代码备份
- 第十三周阅读程序(1)
- 走进AngularJs(七) 过滤器(filter) - 吕大豹
- 解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法