169. Majority Element
https://leetcode.com/problems/majority-element/
本题大意:给定一个大小为n的正整数数组,求出出现了超过⌊ n/2 ⌋次的元素。假定数组不为空并且主元素一定存在。
解题思路:本题有多种解法。
1、统计法(最笨的办法) 先排序,然后统计次数。
1 class Solution { 2 public: 3 int majorityElement(vector<int>& nums) { 4 int n = nums.size(); 5 sort(nums.begin(), nums.end()); 6 int times = 0; 7 int current = nums[0]; 8 for(int i = 0; i < n; i++) 9 { 10 if(current == nums[i]) ++times; 11 else 12 { 13 current = nums[i]; 14 times = 0; 15 } 16 if( n % 2 == 0 && times >= n/2 ) break; 17 if( n % 2 != 0 && times > n/2 ) break; 18 } 19 return current; 20 } 21 };
2、先排序,然后找出中间元素
class Solution { public: int majorityElement(vector<int>& nums) { int n = nums.size(); sort(nums.begin(), nums.end()); return nums[nums.size()/2]; } };
3、时间复杂度最小的算法,一遍扫描就可以得到
1 class Solution { 2 public: 3 int majorityElement(vector<int>& nums) { 4 int flag = 0; 5 int current = nums[0]; 6 for(int i = 0; i < nums.size(); i++) 7 { 8 if(current == nums[i]) ++flag; 9 else if(flag == 0) {current = nums[i]; ++flag;} 10 else --flag; 11 } 12 return current; 13 } 14 };