Majority Number I & || && |||
Majority Number
Given an array of integers, the majority number is the number that occurs more than half of the size of the array. Find it.
Example
Given [1, 1, 1, 1, 2, 2, 2], return 1
分析:
既然这里只有一个majority number,那么它的个数减去其它number个数之和还是为正值。
public class Solution {
/**
* cnblogs.com/beiyeqingteng/
*/
public int majorityNumber(ArrayList<Integer> nums) {
int number = nums.get();
int count = ;
for (int i = ; i < nums.size(); i++) {
if (count == ) {
number = nums.get(i);
count = ;
} else {
if (number == nums.get(i)) {
count++;
} else {
count--;
}
}
}
return number;
}
}
Majority Number II
Given an array of integers, the majority number is the number that occurs more than 1/3 of the size of the array.
Example
Given [1, 1, 1, 1, 2, 2, 2], return 1。
- (case 1) If it is one of the majority number candidates, it votes positive to itself, otherwise
- (case 2) If there is one available majority number slot, it gets the slot and votes positive for itself,
- (case 3) otherwise, it votes negative to both majority candidates.
At last, at least one of the two majority numbers must be more than 1 / 3 of the array.
public class Solution {
/**
* @param nums: A list of integers
* @return: The majority number that occurs more than 1/3
* cnblogs.com/beiyeqingteng/
*
*/
public int majorityNumber(ArrayList<Integer> nums) {
if (nums == null || nums.size() == ) return -;
int number1 = , number2 = , count1 = , count2 = ;
for (Integer i : nums) {
if (number1 == i) {// case 1
count1++;
} else if (number2 == i) {// case 1
count2++;
} else if (count1 == ) {// case 2
number1 = i;
count1 = ;
} else if (count2 == ) {// case 2
number2 = i;
count2 = ;
} else { // case 3
count1--;
count2--;
}
}
// [1,1,1,1,2,2,3,3,4,4,4] cannot pass if the code below is not added.
count1 = ;
count2 = ;
for (Integer i : nums) {
if (number1 == i) {
count1++;
} else if (number2 == i) {
count2++;
}
}
return count1 > count2 ? number1 : number2;
}
}
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.
Example
Given [3,1,2,3,2,3,3,4,4,4] and k=3, return 3.
分析:
Same as above, as there could be at most (k – 1) elements occuring more than 1 / k of the array, we have (k – 1) slots for majority number candidates. The voting rule is the same as above.
Careful for the ConcurrentModificationException in HashMap, we should remove (write) the keys during the HashMap being iterated (read). Write the hashmap after read.
public class Solution {
/**
* @param nums: A list of integers
* @param k: As described
* @return: The majority number
* cnblogs.com/beiyeqingteng/
*/
public int majorityNumber(ArrayList<Integer> nums, int k) {
if (nums == null || nums.size() == || k < ) return -;
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int n : nums) {
if (map.containsKey(n)) {
map.put(n, map.get(n) + );
} else {
// note: if we change condition to map.size() > k - 1, in this case, we assume
// there are at most k candidates, not k - 1, we can ignore the statements from
// line 27 - 35
if (map.size() >= k - ) {
decreaseVotes(map);
} else {
map.put(n, );
}
}
}
for (int key : map.keySet()) {
map.put(key, );
}
for (int n : nums) {
if (map.containsKey(n)) {
map.put(n, map.get(n) + );
}
}
int maxKey = ;
int maxCount = ;
for (int key : map.keySet()) {
if (map.get(key) > maxCount) {
maxCount = map.get(key);
maxKey = key;
}
}
return maxKey;
}
private void decreaseVotes(Map<Integer, Integer> map) {
Set<Integer> keySet = map.keySet();
List<Integer> removeList = new ArrayList<>();
for (Integer key : keySet) {
if (map.get(key) == ) {
removeList.add(key);
}
else {
map.put(key, map.get(key) - );
}
}
//remove candidates with 0 votes and free the slot
for (Integer key : removeList) {
map.remove(key);
}
}
}
Reference:
http://blog.welkinlan.com/2015/05/29/majority-number-lintcode-java/
Majority Number I & || && |||的更多相关文章
- [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 III
Given an array of integers and a number k, the majority number is the number that occurs more than 1 ...
- Lintcode: Majority Number II
Given an array of integers, the majority number is the number that occurs more than 1/3 of the size ...
- leetcode majority number
给定一组数,有一个数在这组数里的出现次数超过n/2次. 求出这是哪个数 https://leetcode.com/problems/majority-element/ 一开始考虑的方是将所有数转化为二 ...
- lintcode 中等题:majority number III主元素III
题目 主元素 III 给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k. 样例 ,返回 3 注意 数组中只有唯一的主元素 挑战 要求时间复杂度为O(n),空间复杂度为O( ...
- lintcode 中等题:Majority number II 主元素 II
题目 主元素II 给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一. 样例 给出数组[1,2,1,2,1,3,3] 返回 1 注意 数组中只有唯一的主元素 挑战 要求时 ...
- 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 求大多数
Given an array of integers, the majority number is the number that occurs more than half of the size ...
- Lintcode: Majority Number II 解题报告
Majority Number II 原题链接: http://lintcode.com/en/problem/majority-number-ii/# Given an array of integ ...
随机推荐
- tmpfs——Linux的一种虚拟内存文件系统
虚拟内核文件系统(VirtualKernel File Systems),是指那些是由内核产生但不存在于硬盘上(存在于内存中)的文件系统.例如 1.proc proc文件系统为操作系统本身和应用程序之 ...
- C# 协变out 、逆变 in
需求:泛型使用多态性 备注:协变逆变只能修饰 接口和委托 简单理解: 1.使用 in 修饰后为逆变,只能用作形参使用 ,参考 public delegate void Action<in T&g ...
- mysql 分页性能优化
最简单的分页方法是这样的 , 该表中存在5w左右数据 执行时间平均在10s左右,因此该种方式在数据量大的情况下查询效率极低. 优化方式有以下几种 1.此种方式平均在7-8s之间(CreateDate ...
- regsvr32的使用
注册器是: DllRegisterServer 命令就是: regsvr32 不是regsrv32.
- Linux中zip压缩和unzip解压缩命令详解
文章转自:http://www.jb51.net/LINUXjishu/105916.html 1.把/home目录下面的mydata目录压缩为mydata.zipzip -r mydata.zip ...
- standford工具-parser
stanford自然语言处理开源了很多工具,很实用也很方便,记录下来,以备后用. 第一篇就从句法分析开始吧(所用的平台都是java+eclipse). <一>操作 1.http://www ...
- IEnumerable 和 IEnumerator
IEnumerable 接口只包含一个抽象的方法 GetEnumerator(),它返回一个可用于循环访问集合的 IEnumerator 对象,IEnumerator 对象是一个集合访问器. 需要给自 ...
- [原] Android快速开发框架-AndroidFine,GitHub开源
Android快速开发框架 UI组件,不止是简单整合,更易用 沉浸式状态栏,界面更漂亮 左滑返回,非常流畅 简单.可复用.易扩展的底部导航 PagerSlidingTabStrip,导航标签文字颜色和 ...
- Junit初级编码(一)第一个Junit测试程序
序,Junit测试是单元测试的一个框架,提供了很多方法,供我们快速开展单元测试.目前最新版本JAR包为4.12,官网地址为http://junit.org/ 一.第一个Junit测试程序 1 去官网下 ...
- KVM虚拟机内存不足,调整参数
Dec :: vgfs001 kernel: tiotest_AMD_x86 invoked oom-killer: gfp_mask=, oom_adj=, oom_score_adj= Dec : ...