Advertisement
sweet1cris

Untitled

Jan 9th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.82 KB | None | 0 0
  1. public class Solution {
  2.     /**
  3.      * @param nums: A list of integers
  4.      * @param k: As described
  5.      * @return: The majority number
  6.      */
  7.     public int majorityNumber(ArrayList<Integer> nums, int k) {
  8.         // count at most k keys.
  9.         HashMap<Integer, Integer> counters = new HashMap<Integer, Integer>();
  10.         for (Integer i : nums) {
  11.             if (!counters.containsKey(i)) {
  12.                 counters.put(i, 1);
  13.             } else {
  14.                 counters.put(i, counters.get(i) + 1);
  15.             }
  16.            
  17.             if (counters.size() >= k) {
  18.                 removeKey(counters);
  19.             }
  20.         }
  21.        
  22.         // corner case
  23.         if (counters.size() == 0) {
  24.             return Integer.MIN_VALUE;
  25.         }
  26.        
  27.         // recalculate counters
  28.         for (Integer i : counters.keySet()) {
  29.             counters.put(i, 0);
  30.         }
  31.         for (Integer i : nums) {
  32.             if (counters.containsKey(i)) {
  33.                 counters.put(i, counters.get(i) + 1);
  34.             }
  35.         }
  36.        
  37.         // find the max key
  38.         int maxCounter = 0, maxKey = 0;
  39.         for (Integer i : counters.keySet()) {
  40.             if (counters.get(i) > maxCounter) {
  41.                 maxCounter = counters.get(i);
  42.                 maxKey = i;
  43.             }
  44.         }
  45.        
  46.         return maxKey;
  47.     }
  48.    
  49.     private void removeKey(HashMap<Integer, Integer> counters) {
  50.         Set<Integer> keySet = counters.keySet();
  51.         List<Integer> removeList = new ArrayList<>();
  52.         for (Integer key : keySet) {
  53.             counters.put(key, counters.get(key) - 1);
  54.             if (counters.get(key) == 0) {
  55.                 removeList.add(key);
  56.             }
  57.         }
  58.         for (Integer key : removeList) {
  59.             counters.remove(key);
  60.         }
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement