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.
解题:虽然AC,但是感觉空间不符合题意。未完待续。。。。
package hashtable;
/*
* 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.
*
*
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
public class MajorityElementII {
public List<Integer> majorityElement(int[] nums) {
List<Integer> res = new ArrayList<Integer>();
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
if (nums.length < 1) {
return res;
}
int count = nums.length / 3;
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(nums[i])) {
map.put(nums[i], 1 + map.get(nums[i]));
} else {
map.put(nums[i], 1);
}
}
Iterator<Entry<Integer, Integer>> iter = map.entrySet().iterator();
while (iter.hasNext()) {
Entry<Integer, Integer> entry = iter.next();
if (entry.getValue() > count) {
res.add(entry.getKey());
}
}
return res;
}
public static void main(String[] args) {
int[] nums = { 1,2,3 };
System.out.println(new MajorityElementII().majorityElement(nums));
}
}