Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋
times.ios
You may assume that the array is non-empty and the majority element always exist in the array.數組
題目大意:app
找出數組中超過一半的數。spa
C++實現代碼:code
#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; }
若是要找當好出現一半的數呢?此時這個數多是經過上面的辦法找到的那個數,也多是最後一個數,所以,只須要再次遍歷數組,找出與最後一個數相等的數的個數,若是小於一半,那麼上面找出的數就是恰好出現一半的數,不然最後一個數是恰好出現一半的數。blog