[LeetCode]Majority Element
来源:互联网 发布:网络平台借贷违法的吗 编辑:程序博客网 时间:2024/06/01 09:46
题目描述:
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
You may assume that the array is non-empty and the majority element always exist in the array.
题目大意:
给定一个长度为n的数组,寻找其中的“众数”。众数是指出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的并且数组中的众数永远存在。
我的第一想法是建一个map保存每个元素出现的次数,时间复杂0(n), 空间复杂度0(n)。代码如下:
import java.util.Map;import java.util.HashMap;public class Main { public static void main(String args[]) { System.out.println(solution(new int[] { 1, 1, 2, 2, 3, 1 })); } private static int solution(int[] num) { if(num == null || num.length == 0) { return -1; } Map<Integer, Integer> map = new HashMap<>(); for(int elem : num) { //map包含元素则在原来的value上加1,否则value为1 map.put(elem, map.get(elem) == null ? 1 : map.get(elem) + 1); } int result = num[0]; int maxTimes = 0; //遍历map找出出现次数最多的元素 for(int elem: map.keySet()) { if(map.get(elem) > maxTimes) { maxTimes = map.get(elem); result = elem; } } return result; }}
总觉得自己这个方法空间复杂度过高,网上看到了一种空间复杂度为0(1)的算法。链接
解题思路:
“投票算法”,设定两个变量candidate和count。candidate保存当前可能的候选众数,count保存该候选众数的出现次数。
遍历数组num。
如果当前的数字e与候选众数candidate相同,则将计数count + 1
否则,如果当前的候选众数candidate为空,或者count为0,则将候选众数candidate的值置为e,并将计数count置为1。
否则,将计数count - 1
最终留下的候选众数candidate即为最终答案。
以上算法时间复杂度为O(n),空间复杂度为O(1)
实现代码如下:
private static int solution2(int[] num) { int result=num[0]; int len = num.length; int count = 0; for (int i=0;i<len;i++){ if (count==0||result==num[i]) { result = num[i]; count++; } //count清零时,取当前数作为result else count--; } return result; }
- 但是我想要说明的是,这个算法是有bug的,不信你试试输入1,1,2,2,3,1,结果是输出3的,仔细想想就知道错在哪了。
- 几分钟后,我想明白了,题目有说明,众数出现的次数大于n/2,那1,1,2,2,3,1不满足要求,所以这个算法是没有问题的,啊哈哈哈哈
1 0
- 【leetcode】Majority Element II,Majority element algorithm
- Leetcode: Majority Element &Majority Element II
- Leetcode Majority Element
- leetcode 169-Majority Element
- 【leetcode 哈希表】Majority Element
- LeetCode:Majority Element
- leetcode:Majority Element
- leetcode: Majority Element
- [LeetCode] Majority Element
- leetcode 153: Majority Element
- leetcode Majority Element
- LeetCode:Majority Element
- leetcode:Majority Element
- [LeetCode] Majority Element
- Leetcode-Majority Element
- [leetcode]Majority Element
- [LeetCode]Majority Element
- Leetcode: Majority Element
- linux下如何显示隐藏文件
- C#压缩文件(SharpZipLib)
- java集合14--Map总结
- ③Cookie窃取攻击
- rsa加密算法
- [LeetCode]Majority Element
- C#语言和数据库技术基础 MyBank
- LeetCode No.258 Add Digits
- javascript中的深拷贝和浅拷贝?
- [noip2013tg] 火柴排队
- java集合15--set架构
- predis如何实现phpredis的pconnect方法
- 第11周 oj (FINAL)趣味取小数
- 素数判定、埃氏筛法与整数分解