Given an integer array of size n, find all elements this appear more than times ? n/3 ? . The algorithm should run in linear time and in O (1) space.
Solution:
At most have both elements in the result, can and counter to record occurrence. Then calculate if match the condition.
Public list<integer> majorityelement (int[] nums) {list<integer> result = new arraylist<> (); if (nums.length==0) return result; int n1 = Nums[0]; int n2 = 0; int count1 = 1; int count2 = 0; for (int i=1;i<nums.length;i++) {if (nums[i] = = n1) {count1++; }else if (nums[i] = = n2) {count2++; }else{if (count1 = = 0) {n1 = nums[i]; count1++; }else if (Count2 = = 0) {n2 = Nums[i]; count2++; }else{count1--; count2--; }}} count1 = 0; Count2 = 0; for (int i=0;i<nums.length;i++) {if (nums[i] = = n1) count1++; if (nums[i] = = n2) count2++; } if (COUNT1>NUMS.LENGTH/3) Result.add (N1); if (n1 = = n2) return result; if (count2>nUMS.LENGTH/3) Result.add (N2); return result; }
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
[Leetcode 229] Majority element II