• 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 }
  • 相关阅读:
    开发工具(四)
    开发工具(三)
    调试(二)
    调试(一)
    jsp乱码解决大全(转自csdn一高手)
    开发工具(二)
    开发工具
    在 SQL Server 2000 中对链接服务器运行分布式事务在您安装 Windows Server 2003 或 Windows XP Service Pack 2 时可能收到 7391 错误信息
    蓝桥杯试题
    How to lay pipelines
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/4489299.html
Copyright © 2020-2023  润新知