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 ...
随机推荐
- authorization配置
在 Web.config 文件的<configuration>标记的子标记<authorization>和</authorization>之间用于设置应用程序的授权 ...
- CSS学习点滴
1.CSS :link 选择器 a:link { background-color:yellow;text-decoration:none } 参考:http://www.w3school.com.c ...
- python 跨语言数据交互、json、pickle(序列化)、urllib、requests(爬虫模块)、XML。
Python中用于序列化的两个模块 json 用于[字符串]和 [python基本数据类型] 间进行转换 pickle 用于[python特有的类型] 和 [python基本数据类型]间进 ...
- YII2操作mongodb笔记(转)
componets配置: 'mongodb' => [ 'class' => '\yii\mongodb\Connection', 'dsn' => 'mongodb://test: ...
- android控件库(2)-仿Google Camera 的对焦效果
一直很喜欢Google Camera的自动对焦效果,今日闲来无事,自己做了个: 废话不多说,代码才是王道: package com.example.test.view; import com.exam ...
- 如何运行python
如何运行Python程序 不少新手朋友遇到的第一个问题,不是Python的数据结构,不是Python的类库使用,更不是第三方模块.框架的应用,而是简单的“如何运行”!Python可用以下三种方式运行, ...
- git SSH keys
An SSH key allows you to establish a secure connection between your computer and GitLab. Before gene ...
- 编译本地64位版本的hadoop-2.6.0
官方提供的hadoop-2.x版本貌似都是32位的,在64位机子下使用可能会报错,最好使用官方提供的源码进行本地编译,编译成适合本地硬件环境的64位软件包. 关于native Hadoop是使用J ...
- Redhat系统网络配置
1.RedHat系统的网络配置文件/etc/sysconfig/network-scirpts/ifcfg-<interface-name>文件 DEVICE=eth0 ...
- 使用type="redirect"重定向,传递List等变量到jsp页面的问题
Struts2在提交表单的时候,使用「type="redirect"」重定向到相应的jsp页面. Action中的List表单是无法传到相应的jsp页面. 我猜测是因为List作为 ...