标签:c++ leetcode 229 majority element ii
Given an integer array of size n, find all elements that appear more than ? n/3 ? times. The algorithm should run in linear time and in O(1) space.
Hint:
How many majority elements could it possibly have?
Do you have a better hint? Suggest it!
记录在数组中出现次数最多的两个元素,然后判断这两个元素是不是出现次数超过n/3
AC代码
class Solution { public: vector<int> majorityElement(vector<int>& nums) { int sum=nums.size(); if(sum<=1) return nums; vector<int> res; int temp1=0; int count1=0; int temp2=0; int count2=0; for(int i=0;i<sum;++i) { if(count1==0||nums[i]==temp1) { ++count1; temp1=nums[i]; } else if(count2==0||nums[i]==temp2) { ++count2; temp2=nums[i]; } else { --count1; --count2; } } int sum1=0; int sum2=0; for(int i=0;i<sum;++i) { if(nums[i]==temp1) ++sum1; else if(nums[i]==temp2) ++sum2; else continue; } if(sum1>sum/3) res.push_back(temp1); if(sum2>sum/3) res.push_back(temp2); return res; } };
版权声明:本文为博主原创文章,未经博主允许不得转载。
[leetcode 229]Majority Element II
标签:c++ leetcode 229 majority element ii
原文地址:http://blog.csdn.net/er_plough/article/details/47399251