Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋
times.
You may assume that the array is non-empty and the majority element always exist in the array.
题目大意:
找出数组中超过一半的数。
C++实现代码:
#include<iostream> #include<vector> using namespace std; class Solution { public: int majorityElement(vector<int> &num) { if(num.empty()) return -1; int n=num.size(); int i; int index=0; int count=1; for(i=1;i<n;i++) { if(num[i]==num[index]) { count++; } else count--; if(count<0) { count=1; index=i; } } return num[index]; } }; int main() { vector<int> num={3,3,3,3,3,3,1,2,4,5,3,45,2,54}; Solution s; cout<<s.majorityElement(num)<<endl; }
#include<iostream> #include<vector> using namespace std; class Solution { public: int majorityElement(vector<int> &num) { if(num.empty()) return -1; int n=num.size(); int major=num[0]; int i; int count=1; for(i=1;i<n;i++) { if(num[i]==major) count++; else count--; if(count<0) { count=1; major=num[i]; } } return major; } }; int main() { vector<int> num={3,3,3,3,3,3,1,2,5,3,45,2,54}; Solution s; cout<<s.majorityElement(num)<<endl; }
如果要找当好出现一半的数呢?此时这个数可能是通过上面的办法找到的那个数,也可能是最后一个数,因此,只需要再次遍历数组,找出与最后一个数相等的数的个数,如果小于一半,那么上面找出的数就是刚好出现一半的数,否则最后一个数是刚好出现一半的数。
时间: 2024-10-26 20:55:46