LeetCode 229 Majority Element II(主要元素II)(Array)(Boyer–Moore majority vote algorithm)
来源:互联网 发布:霍华德新秀赛季数据 编辑:程序博客网 时间:2024/06/05 18:37
原文
给定一个长度为n的整型数组,找出所有出现超过 ⌊ n/3 ⌋ 次的元素。算法应该运行在线性时间上,且进用
提示:
它可能有多少个主要元素?
原文
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space.
Hint:
How many majority elements could it possibly have?
分析
The Boyer-Moore Vote Algorithm solves the majority vote problem in linear time
Mathematically, given a finite sequence (length n) of numbers, the object is to find the majority number defined as the number that appears more than
import java.util.*;public class MajorityVote { public int majorityElement(int[] num) { int n = num.length; int candidate = num[0], counter = 0; for (int i : num) { if (counter == 0) { candidate = i; counter = 1; } else if (candidate == i) { counter++; } else { counter--; } } counter = 0; for (int i : num) { if (i == candidate) counter++; } if (counter <= n / 2) return -1; return candidate; } public static void main(String[] args) { MajorityVote s = new MajorityVote(); System.out.format("%d\n", s.majorityElement(new int[] {1, 2, 3})); System.out.format("%d\n", s.majorityElement(new int[] {2, 2, 3})); }}
代码
Java
public class Solution { public List<Integer> majorityElement(int[] nums) { List<Integer> marjority = new ArrayList<>(); int n = nums.length; int candidate1 = 0, candidate2 = 0, counter1 = 0, counter2 = 0; for (int i : nums) { if (candidate1 == i) { counter1++; } else if (candidate2 == i) { counter2++; } else if (counter1 == 0) { candidate1 = i; counter1 = 1; } else if (counter2 == 0) { candidate2 = i; counter2 = 1; } else { counter1--; counter2--; } } counter1 = 0; counter2 = 0; for (int i : nums) { if (i == candidate1) counter1++; else if (i == candidate2) counter2++; } if (counter1 > n/3) marjority.add(candidate1); if (counter2 > n/3) marjority.add(candidate2); return marjority; }}
- LeetCode 229 Majority Element II(主要元素II)(Array)(Boyer–Moore majority vote algorithm)
- 摩尔投票算法(Boyer–Moore majority vote algorithm)
- Boyer–Moore majority vote algorithm
- Boyer–Moore majority vote algorithm 博耶-穆尔多数投票算法 leetcode第229题
- 【leetcode】Array——Majority Element II(229)
- 【leetcode】Majority Element II,Majority element algorithm
- The Boyer-Moore Majority Vote Algorithm
- [leetcode-229]Majority Element II(c++)
- [日常套路] Boyer–Moore majority vote algorithm
- LeetCode Majority Element II(Moore Voting Algorithm即Majority Voting Algorithm)
- LeetCode OJ 之 Majority Element II(大部分元素2)
- LeetCode 题解(129): Majority Element II
- Boyer-Moore Majority Vote Algorithm的更一般性问题
- LeetCode-169.229. Majority Element II (JAVA)主要元素
- 153. Find Minimum in Rotated Sorted Array\229. Majority Element II\Moore's voting algorithm
- leetcode_c++:Majority Element II (229)
- LeetCode 229. Majority Element II(众数II)
- leetcode#229 Majority Element II
- css3 filter滤镜
- 2016年上半年总结
- 求质数算法C++
- 初级UnityDemo全纪录(二):代码篇③
- Python中遇到"UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequ
- LeetCode 229 Majority Element II(主要元素II)(Array)(Boyer–Moore majority vote algorithm)
- 在C++里,有两种方法创建对象:
- 图片上传预览
- Codeforces Round #101 (Div. 2)
- 浏览器内核
- JDK的命令行工具和可视化工具学习笔记
- 实现strchr的功能
- JAVA_OA(十四):SSM练手项目bug-JSP页面传递参数的编码问题
- 第三个年头