[刷题]Majority Number III

来源:互联网 发布:外汇软件 mt4骗局 编辑:程序博客网 时间:2024/05/01 03:52

[LintCode]Majority Number III

Version 1

public class Solution {    /**     * @param nums: A list of integers     * @param k: As described     * @return: The majority number     */    public int majorityNumber(ArrayList<Integer> nums, int k) {        // 2015-09-22 O(n)        if (nums == null || nums.size() == 0 || k < 1) {            return 0;        }        HashMap<Integer, Integer> map = new HashMap<>();        for (int i = 0; i < nums.size(); i++) {            int temp = nums.get(i);            if (!map.containsKey(temp)) {                map.put(temp, 1);            } else {                map.put(temp, map.get(temp) + 1);            }        }        int len = nums.size();        for (Integer i : map.keySet()) {            if (map.get(i) > len / k) {                return i;            }        }        return 0;    }}

Version 2

public class Solution {    /**     * @param nums: A list of integers     * @param k: As described     * @return: The majority number     */    public int majorityNumber(ArrayList<Integer> nums, int k) {        // O(n) time and O(k) extra space        // count at most k keys.        HashMap<Integer, Integer> counters = new HashMap<Integer, Integer>();        for (Integer i : nums) {            if (!counters.containsKey(i)) {                counters.put(i, 1);            } else {                counters.put(i, counters.get(i) + 1);            }                        if (counters.size() >= k) {                removeKey(counters);            }        }                // corner case        if (counters.size() == 0) {            return Integer.MIN_VALUE;        }                // recalculate counters        for (Integer i : counters.keySet()) {            counters.put(i, 0);        }        for (Integer i : nums) {            if (counters.containsKey(i)) {                counters.put(i, counters.get(i) + 1);            }        }                // find the max key        int maxCounter = 0, maxKey = 0;        for (Integer i : counters.keySet()) {            if (counters.get(i) > maxCounter) {                maxCounter = counters.get(i);                maxKey = i;            }        }                return maxKey;    }        /**     * 不能在遍历的时候删除元素,所以在遍历结束后再删除     */    private void removeKey(HashMap<Integer, Integer> counters) {        Set<Integer> keySet = counters.keySet();        List<Integer> removeList = new ArrayList<>();        for (Integer key : keySet) {            counters.put(key, counters.get(key) - 1);            if (counters.get(key) == 0) {                removeList.add(key);            }        }        for (Integer key : removeList) {            counters.remove(key);        }    }}



0 0
原创粉丝点击