229. Majority Element II | Java最短代码实现
2016-03-23 23:42
375 查看
原题链接:229. Majority Element II
【思路】
1. 超过n/3元素个数最多只有2个,记为num1和num2
2. 数组中连续3个数据为一组的话,一共n/3组,那么如果存在符合条件的元素,这个元素一定出现在某一个组内两次
3. 知道了以上两个条件后,用所谓的摩尔投票法,共两轮,
第一轮:找出出现次数最多的两个元素,每次存储两个元素num1和num2,如果第三个元素与其中一个相同,则增加计数c1或c2, 否则,清除n1和n2,从下一个数据开始重新统计.
根据第二条,数目较多的元素一定可以被查到,当然查到的不一定是大于n/3的.
第二轮:验证这两个元素是否满足条件,即出现的次数是否大于n/3;
cases passed. Runtime: 3
ms Your runtime beats 74.81% of javasubmissions.
欢迎优化!
【思路】
1. 超过n/3元素个数最多只有2个,记为num1和num2
2. 数组中连续3个数据为一组的话,一共n/3组,那么如果存在符合条件的元素,这个元素一定出现在某一个组内两次
3. 知道了以上两个条件后,用所谓的摩尔投票法,共两轮,
第一轮:找出出现次数最多的两个元素,每次存储两个元素num1和num2,如果第三个元素与其中一个相同,则增加计数c1或c2, 否则,清除n1和n2,从下一个数据开始重新统计.
根据第二条,数目较多的元素一定可以被查到,当然查到的不一定是大于n/3的.
第二轮:验证这两个元素是否满足条件,即出现的次数是否大于n/3;
public List<Integer> majorityElement(int[] nums) { List<Integer> result = new ArrayList<Integer>(); if (nums == null || nums.length == 0) return result; if (nums.length == 1) { result.add(nums[0]); return result; } int num1 = 0; int num2 = 0; int c1 = 0; int c2 = 0; for (int num : nums) { if (num1 == num) c1++; else if (num2 == num) c2++; else if (c1 < 1) { c1 = 1; num1 = num; } else if (c2 < 1) { c2 = 1; num2 = num; } else { c1--; c2--; } } c1 = 0; c2 = 0; for (int num : nums) { if (num == num1) c1++; else if (num == num2) c2++; } if (c1 > nums.length / 3) result.add(num1); if (c2 > nums.length / 3) result.add(num2); return result; }65 / 65 test
cases passed. Runtime: 3
ms Your runtime beats 74.81% of javasubmissions.
欢迎优化!
相关文章推荐
- 学习java的第一天
- java基础学习03(java基础程序设计)
- 优化myeclipse启动速度以及解决内存不足问题
- java获取随机数
- JAVA之日期时间
- Java 线程同步
- Java流的操作使用
- java中currentTimeMillis()和Math.random()
- ubuntu下eclipse无法启动问题
- java中传参
- Druid连接池及监控在spring中的配置
- Java学习笔记之JDBC
- JNI_01_C和Java中的数据类型
- Quartz学习笔记(七) quartz与spring实现任务动态管理面板
- 如何将MyEclipse开发的项目导入到Eclipse中运行
- MyEclipse 优化技巧
- 160323、理解Java虚拟机体系结构
- EL表达式与标签
- Java中的Copy-On-Write容器
- Java常用排序算法(二):选择排序