标签:输入数据 一半 namespace pac -- 计数器 lse end name
在一个无序数组中,存在一个数,它出现的次数大于数组长度的一半。输出这个数
一、排序、遍历
二、摩尔投票法
摩尔投票算法是一种使用线性时间和常数空间查找大部分元素序列的算法。
1、出现超过一半以上(n/2)的元素有且只有一个;
2、这个元素一定存在
算法步骤
我们维护一个局部变量作为当前查找元素,一个局部变量作为计数器,
当遍历开始的时候,此时计数(count)为0,则将数组第一个元素作为当前查找元素;
当遍历的元素与查找元素相等,计数加1;反之则-1;
若当计数为0时,将下一个元素作为当前查找元素,继续重复以上操作;当遍历结束时,当前查找元素则为目标元素。
#include<iostream> using namespace std; int main() { int nums[100]; int count = 1; int e = nums[0]; int n, x; cin >> n; for (int i = 0; i < n; i++) { cin >> nums[i]; } for (int i = 1; i < n; i++) { if (e == nums[i]) count++; else if (count != 0) { count--; } else if (count == 0) e = nums[i]; } cout << e << endl; system("pause"); return 0; }
标签:输入数据 一半 namespace pac -- 计数器 lse end name
原文地址:https://www.cnblogs.com/-citywall123/p/13336802.html