zoukankan      html  css  js  c++  java
  • Majority Number III

    Given an array of integers and a number k, the majority number is the number that occursmore than 1/k of the size of the array.

    Find it.

    Example

    Given [3,1,2,3,2,3,3,4,4,4] and k=3, return 3.

    Note

    There is only one majority number in the array.

    Challenge

    O(n) time and O(k) extra space

    对于1/k 的数,每当要删除的时候,要把k的数字同时删掉,这样不会影响最终的结果。 

     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         // write your code
     9         HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
    10         for(int i = 0; i < nums.size(); i ++){
    11             int num = nums.get(i);
    12             if(map.containsKey(num)){
    13                 map.put(num, map.get(num) + 1);
    14             }else{
    15                 if(map.size() < 3){
    16                     map.put(num, 1);
    17                 }else{//decrease every count by one, remove pair which count is 0
    18                     ArrayList<Integer> removeKey = new ArrayList<Integer>();
    19                     for (Map.Entry en : map.entrySet()){
    20                         en.setValue((int)en.getValue() - 1);
    21                         if((int)en.getValue() == 0){
    22                             removeKey.add((int)en.getKey());
    23                         }
    24                     }
    25                     for(int j = 0; j < removeKey.size(); j ++){
    26                         map.remove(removeKey.get(j));
    27                     }
    28                 }
    29             }
    30         }
    31         
    32         int result = 0;
    33         int resultValue = 0;
    34         for (Map.Entry cur : map.entrySet()){
    35             if((int)cur.getValue() > resultValue){
    36                 result = (int)cur.getKey();
    37                 resultValue = (int)cur.getValue();
    38             }
    39         }
    40         return result;
    41     }
    42 }
  • 相关阅读:
    使用git fetch更新远程代码到本地仓库
    图的最短路径(C++实现)
    二叉树遍历(C++实现)
    栈的应用(C++实现)
    求25的所有本原根Python实现
    Web工作方式:浏览网页的时候发生了什么?
    Atom编辑器插件
    H5调取APP或跳转至下载
    Vue父组件传递异步获取的数据给子组件
    flex属性
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/4489299.html
Copyright © 2011-2022 走看看