classSolution{public:vector<int>majorityElement(vector<int>&nums){vector<int>ans;intcandidate1=0;intcandidate2=1;// Any number different from candidate1intcountSoFar1=0;// # of candidate1 so farintcountSoFar2=0;// # of candidate2 so farfor(constintnum:nums)if(num==candidate1){++countSoFar1;}elseif(num==candidate2){++countSoFar2;}elseif(countSoFar1==0){// Assign new candidatecandidate1=num;++countSoFar1;}elseif(countSoFar2==0){// Assign new candidatecandidate2=num;++countSoFar2;}else{// Meet a new number, so pair out previous counts--countSoFar1;--countSoFar2;}constintcount1=count(begin(nums),end(nums),candidate1);constintcount2=count(begin(nums),end(nums),candidate2);if(count1>nums.size()/3)ans.push_back(candidate1);if(count2>nums.size()/3)ans.push_back(candidate2);returnans;}};
classSolution{publicList<Integer>majorityElement(int[]nums){List<Integer>ans=newArrayList<>();intcandidate1=0;intcandidate2=1;// Any number different from candidate1intcountSoFar1=0;// # of candidate1 so farintcountSoFar2=0;// # of candidate2 so farfor(finalintnum:nums)if(num==candidate1){++countSoFar1;}elseif(num==candidate2){++countSoFar2;}elseif(countSoFar1==0){// Assign new candidatecandidate1=num;++countSoFar1;}elseif(countSoFar2==0){// Assign new candidatecandidate2=num;++countSoFar2;}else{// Meet a new number, so pair out previous counts--countSoFar1;--countSoFar2;}intcount1=0;intcount2=0;for(finalintnum:nums)if(num==candidate1)++count1;elseif(num==candidate2)++count2;if(count1>nums.length/3)ans.add(candidate1);if(count2>nums.length/3)ans.add(candidate2);returnans;}}