给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一。 注意事项 数组中只有唯一的主元素 样例 给出数组[1,2,1,2,1,3,3] 返回 1 挑战 要求时间复杂度为O(n),空间复杂度为O(1)。 标签 贪心 枚举法 LintCode 版权所有 Zenefits class Solution { public: /** * @param nums: A list of integers * @return: The majority number occurs more than 1/3. */ int majorityNumber(vector<int> nums) { // write your code here int temp[3],count[3]={1,0,0}; temp[0]=nums[0]; int flag=0; int min=0; int max=0; int n=nums.size(); for(int i=1;i<n;i++){ flag=0; for(int j=0;j<3;j++){ min=count[j]>count[min]?min:j; } for(int j=0;j<3;j++){ if(nums[i]==temp[j]){ count[j]++; flag=1; break; } } if(1==flag) continue; else { if(count[min]==0){ count[min]=1; temp[min]=nums[i]; continue; } else{ for(int j=0;j<3;j++){ count[j]-=count[min]; } count[min]=1; temp[min]=nums[i]; } } } for(int j=0;j<3;j++){ min=count[j]>count[min]?min:j; } if(count[min]!=0) for(int j=0;j<3;j++) count[j]-=count[min]; int c1=1,c2=1,num1,num2; for(int i=0;i<3;i++){ if(count[i]>0&&1==c1){ num1=temp[i]; c1=0; } else if(count[i]>0){ num2=temp[i]; c2=0; } } if(1==c2) return num1; for(int i=0;i<n;i++){ if(nums[i]==num1) c1++; if(nums[i]==num2) c2++; } max=c1>c2?num1:num2; return max; } };