寻找多数元素 算法
2012-04-20 19:29
627 查看
定义:
整型数组a[1...n],如果整数x在数组a中出现的次数多于半数,则x称为多数元素
应用概念:
观察结论5.1:在原序列中去除两个不同的元素后,那么在原序列中的多数元素在新序列中还是多数元素。
例1: 1,2,2,3,2,2,3 显然2是多数元素
去除1,2,在2,3,2,2,3中2仍是多数元素
去除1,3,在2,3,2,2,3中2更是多数元素
例2: 1,3,2,3,2,2,3 显然没有多数元素
去除1,3,在2,3,2,2,3中2成了多数
测试代码:
整型数组a[1...n],如果整数x在数组a中出现的次数多于半数,则x称为多数元素
应用概念:
观察结论5.1:在原序列中去除两个不同的元素后,那么在原序列中的多数元素在新序列中还是多数元素。
例1: 1,2,2,3,2,2,3 显然2是多数元素
去除1,2,在2,3,2,2,3中2仍是多数元素
去除1,3,在2,3,2,2,3中2更是多数元素
例2: 1,3,2,3,2,2,3 显然没有多数元素
去除1,3,在2,3,2,2,3中2成了多数
测试代码:
#include <stdio.h> int candidate(int a[], int m, int n) { int j = m, c = a[m], count = 1; while (j < n && count > 0) { ++ j; if (a[j] == c) ++ count; else -- count; } if (j == n) return c; else return candidate(a, j+1, n); }; // a[1...n] int Majority(int a[], int n) { int c = candidate(a, 1, 10); int count = 0; int majority; for (int i = 1; i <= n; ++ i) if (a[i] == c) ++ count; if (n%2 == 0) majority = n/2 + 1; else majority = n/2; if (count > majority) return c; else return -1; }; int main() { int a[11]; for (int i = 1; i < 11; ++ i) scanf("%d",a+i); printf("%d\n",Majority(a, 10)); getchar(); getchar(); }
相关文章推荐
- 算法之道---寻找多数元素算法(Java)
- 算法 寻找多数元素
- 《啊哈!算法》读书笔记(第九章)——寻找多数元素问题
- [算法] 利用递归中的归纳法寻找多数元素(主元素)
- 【算法分析】寻找多数元素
- 寻找一个主元(出现次数大于总元素的一半)的算法
- 169. Majority Element (寻找多数元素)
- 寻找多数元素
- 给你一个由n-1个整数组成的未排序的序列,其元素都是1到n中的不同的整数。请写出一个寻找序列中缺失整数的线性时间算法。
- 读取一串整数,寻找合适的数据结构和算法,实现插入元素track(int x) 方法,以及GetRankOfNumber(int x)方法,返回值为小于等于x的元素个数(不包括x本身)
- 【算法剖析】寻找两个已序数组中的第k大元素
- 编程之美 2.12 快速寻找满足条件的两个数 解法三证明 (算法导论 第二版 2.3-7 在n个元素的集合S中找到两个和为x的元素)
- Hoare选择算法 寻找第k小元素C实现 算法的“AWK脚手架和grap运行过程分析”
- 寻找第K小元素O(N)算法
- 算法课作业2.7(判断并寻找主元素)
- 寻找多数元素
- Java算法分析1—————寻找数组同样元素
- Go语言算法之寻找数组第二大元素的方法
- 【算法题】寻找出现次数过半的元素
- 寻找第K大元素的八大算法、源码及拓展