标签:class 习题 [] 不同 def 计数 define 移动 存在
主元素是指:一个数在数组中出现的次数超过数组长度的一半,那么这个数就是数组元素的主元素。
例如:{0,5,5,3,4,5,5,5,5,9}这里面元素5有6个超过了一半,所以就是主元素
使用一种高效率的方法找出数组A的主元素,若有,则输出该元素,否则返回-1
这里我们使用计数器的方法来标记数据元素,将第一个元素设置为候补主元素,计数为1,若是下一个元素还是相同的数,计数+1,若是不同,计数-1,当计数为0,则换下一个元素来做候补主元素,计数变1以此循环。
若是数组存在一个真正的主元素,那么该元素的计数一定是一个大于0的数
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int majority(int A[], int n) { int i=1, count=1; ////计数用 int maj = A[0]; for (i = 0; i < n;i++) { if (A[i] == maj) count++; else { if (count > 0) count--; else { maj = A[i]; count = 1; } } } if (count>0) //找到一个最有可能是主元素的值 { //循环计数验证 count = 0; for (i = 0; i < n; i++) if (A[i] == maj) count++; } if (count > n / 2) return maj; return -1; } int main() { int A[10] = { 2, 3, 3, 3, 9, 3, 7, 3, 3, 4 }; int ret; ret = majority(A,10); printf("%d", ret); system("pause"); return 0; }
标签:class 习题 [] 不同 def 计数 define 移动 存在
原文地址:https://www.cnblogs.com/ssyfj/p/9569087.html