Lintcode: Majority Number III
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的更多相关文章
- 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 ...
- lintcode 中等题:majority number III主元素III
题目 主元素 III 给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k. 样例 ,返回 3 注意 数组中只有唯一的主元素 挑战 要求时间复杂度为O(n),空间复杂度为O( ...
- 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 ...
- Lintcode: Majority Number II 解题报告
Majority Number II 原题链接: http://lintcode.com/en/problem/majority-number-ii/# Given an array of integ ...
- Lintcode: Majority Number 解题报告
Majority Number 原题链接:http://lintcode.com/en/problem/majority-number/# Given an array of integers, th ...
- [LintCode] Majority Number 求众数
Given an array of integers, the majority number is the number that occurs more than half of the size ...
- Lintcode: Majority Number II
Given an array of integers, the majority number is the number that occurs more than 1/3 of the size ...
- [LintCode] Majority Number 求大多数
Given an array of integers, the majority number is the number that occurs more than half of the size ...
- Majority Number III
Given an array of integers and a number k, the majority number is the number that occursmore than 1/ ...
随机推荐
- 基于LR的Oracle应用性能测试
最近对一个oracle ERP系统的INV模块进行性能测试,因为之前大部分都是测试web类型的应用,在这方面经验较少,期间也遇到了不少问题,因此有必要作些总结,以备后忘.首先先简单了解下测试对象相关的 ...
- sentinel
Computer Science An Overview _J. Glenn Brookshear _11th Edition Inherent in processing a sequential ...
- 挑战编程PC/UVa Stern-Brocot代数系统
/* Stern-Brocot代数系统 Stern-Brocot树是一种生成所有非负的最简分数m/n的美妙方式. 其基本方式是从(0/1, 1/0)这两个分数开始, 根据需要反复执行如下操作: 在相邻 ...
- SpringMVC 基于注解的Controller详解
本文出处 http://blog.csdn.net/lufeng20/article/details/7598801 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spri ...
- HBase的架构以及各个模块的功能
一:整体架构 1.体系结构 2.物理模型 3.存储体系 regionserver->region->多个store(列簇)->一个memstore和多个storefile 4.HDF ...
- JNI字段描述符-Java Native Interface Field Descriptors
一.JNI字段描述符 "[I" --- int[] "[[[D" --- double[][][] 如果以一个L开头的描述符,就是类描述符,它后紧跟着类的字符 ...
- JS实现操作成功定时回到主页效果
效果图: 页面代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- HTML页引用CSS
方法1 使用import 方法引用CSS <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"&g ...
- 一个短小的JS函数,用来得到仅仅包含不重复元素的数组
下面函数主要利用了数组的sort方法,之后的逻辑是看最后一个元素是否等于要添加的元素,如果不是就往尾后加. 这个做法的效率等于sort方法的效率,还过得去. 代码: <!DOCTYPE HTML ...
- [收藏夹整理]OpenCV部分
OpenCV中文论坛 OpenCV论坛 opencv视频教程目录(初级) OpenCV 教程 Opencv感想和一些分享 tornadomeet 超牛的大神 [数字图像处理]C++读取.旋转和保存bm ...