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

Find it.

Have you met this question in a real interview? Yes
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

这道题跟Lintcode: Majority Number II思路很像,那个找大于1/3的,最多有两个candidate,这个一样,找大于1/k的,最多有k-1个candidate

维护k-1个candidate 在map里面,key为数字值,value为出现次数。先找到这k-1个candidate后,扫描所有元素,如果该元素存在在map里面,update map;如果不存在,1: 如果map里面有值为count= 0,那么删除掉这个元素,加入新元素;2:map里面没有0出现,那么就每个元素的count--

注意:有可能map里有多个元素count都变成了0,只用删掉一个就好了。因为还有0存在,所以下一次再需要添加新元素的时候不会执行所有元素count-1, 而是会用新元素替代那个为0的元素

这道题因为要用map的value寻找key,所以还可以用map.entrySet(), return Map.Entry type, 可以调用getKey() 和 getValue()

 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) {
// write your code
if (nums==null || nums.size()==0 || k<=0) return Integer.MIN_VALUE;
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
int i = 0;
for (; i<nums.size(); i++) {
int key = nums.get(i);
if (map.containsKey(key)) {
map.put(key, map.get(key)+1);
}
else {
map.put(key, 1);
if (map.size() >= k) break;
}
}
while (i < nums.size()) {
int key = nums.get(i);
if (map.containsKey(key)) {
map.put(key, map.get(key)+1);
}
else {
if (map.values().contains(0)) { //map contains value 0
map.put(key, 1); // add new element to map
//delete key that has value 0
int zeroKey = 0;
for (int entry : map.keySet()) {
if (map.get(entry) == 0) {
zeroKey = entry;
break;
}
}
map.remove(zeroKey);
}
else {
for (int nonzeroKey : map.keySet()) {
map.put(nonzeroKey, map.get(nonzeroKey)-1);
}
}
}
i++;
} HashMap<Integer, Integer> newmap = new HashMap<Integer, Integer>();
int max = 0;
int major = 0;
for (int j=0; j<nums.size(); j++) {
int cur = nums.get(j);
if (!map.containsKey(cur)) continue;
if (newmap.containsKey(cur)) {
newmap.put(cur, newmap.get(cur)+1);
}
else {
newmap.put(cur, 1);
}
if (newmap.get(cur) > max) {
major = cur;
max = newmap.get(cur);
}
}
return major;
}
}

Lintcode: Majority Number III的更多相关文章

  1. LeetCode169 Majority Element, LintCode47 Majority Number II, LeetCode229 Majority Element II, LintCode48 Majority Number III

    LeetCode169. Majority Element Given an array of size n, find the majority element. The majority elem ...

  2. lintcode 中等题:majority number III主元素III

    题目 主元素 III 给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k. 样例 ,返回 3 注意 数组中只有唯一的主元素 挑战 要求时间复杂度为O(n),空间复杂度为O( ...

  3. LintCode Majority Number II / III

    Given an array of integers, the majority number is the number that occurs more than 1/3 of the size ...

  4. Lintcode: Majority Number II 解题报告

    Majority Number II 原题链接: http://lintcode.com/en/problem/majority-number-ii/# Given an array of integ ...

  5. Lintcode: Majority Number 解题报告

    Majority Number 原题链接:http://lintcode.com/en/problem/majority-number/# Given an array of integers, th ...

  6. [LintCode] Majority Number 求众数

    Given an array of integers, the majority number is the number that occurs more than half of the size ...

  7. Lintcode: Majority Number II

    Given an array of integers, the majority number is the number that occurs more than 1/3 of the size ...

  8. [LintCode] Majority Number 求大多数

    Given an array of integers, the majority number is the number that occurs more than half of the size ...

  9. Majority Number III

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

随机推荐

  1. 灰度图像 Grayscale Binary_image

    https://en.wikipedia.org/wiki/Grayscale https://zh.wikipedia.org/wiki/灰度图像 In photography and comput ...

  2. 使用Nginx在自己的电脑上实现负载均衡

    我其实早就想弄这个负载均衡了,但是总觉得这玩意肯定不简单,今天星期六闲着没事终于下定决心来搞一搞他了,但是没想到这玩意这么简单,真的是出乎我的意料的简单(我现在陪的是最简单的那种).额是没有我想象中的 ...

  3. gogs安装

    1.下载gogs文件,如果图方便可以选择编译好的文件网址https://gogs.io/docs/installation/install_from_binary 2.gogs web运行gogs 3 ...

  4. OpenSSL-for-IOS

    http://download.csdn.net/download/kokjuis/9723109

  5. C++ 字符串操作常见函数

    //字符串拷贝,排除指定字符 char *strcpy_exclude_char(char *dst, const int dst_len, const char *src, const char * ...

  6. [ASP.NET] Dictionary 和 Hashtable 区别

    Dictionary和Hashtable 是两个比较常用的表示键/值的集合,两者在实际使用过程中有何区别呢? 具体区别如下: 1. Hashtable不支持泛型,而Dictionary支持泛型. 2. ...

  7. ArcGIS三大文件格式解析

    原文:ArcGIS三大文件格式解析 Shape数据 Shapefile是ArcView GIS 3.x的原生数据格式,属于简单要素类,用点.线.多边形存储要素的形状,却不能存储拓扑关系,具有简单.快速 ...

  8. ios9 之后,Xcode7不推荐使用UIAlertView,改用UIAlertController+UIAlertAction(按钮)

    /** *  ios9 之后,Xcode7不推荐使用UIAlertView,改用UIAlertController+UIAlertAction(按钮) */ UIAlertController *al ...

  9. 《Maven实战》阅读笔记

    java -versionmvn -vmvn help:system m2eclipse maven->install MAVEN_OPTS: -Xms128m -Xmx512mmvn clea ...

  10. windows 访问 ubuntu虚拟机 django服务器 失败

    配置ubuntu配置成桥接,在ubuntu虚拟机中运行django.py开发服务器.windows访问django失败. 虚拟机运行: python manage.py runserver 0.0.0 ...