算法笔记_131:出现次数超过一半的数(Java)
2017-04-16 19:48
309 查看
1 问题描述
数组中有一个数出现的次数超过了数组长度的一半,请找出这个数。2 解决方案
2.1 每次删除两个不同的数
具体代码如下:package com.liuzhen.practice; public class Main { public int getResult(int[] A) { //找到两个不相等的元素,将这两个元素变为0 for(int start = 0, i = 1;i < A.length;i++) { while(A[start] == 0) { start++; } if(A[start] != A[i] && start < i) { A[start] = 0; A[i] = 0; start++; } } int result = 0; for(int i = 0;i < A.length;i++) { if(A[i] != 0) { result = A[i]; break; } } return result; } public static void main(String[] args) { Main test = new Main(); int[] A = {1,2,3,4,5,6,7,1,1,2,3,2,2,2,2,2}; System.out.println(test.getResult(A)); } }
[b]运行结果:[/b]
2
2.2 记录两个值
具体代码如下:package com.liuzhen.practice; public class Main1 { public int FindOneNumber(int[] A) { int result = A[0]; int count = 1; for(int i = 1;i < A.length;i++) { if(count == 0) { result = A[i]; count = 1; } else { if(A[i] == result) count++; else count--; } } return result; } public static void main(String[] args) { Main1 test = new Main1(); int[] A = {1,2,3,4,5,6,7,1,1,2,3,2,2,2,2,2}; System.out.println(test.FindOneNumber(A)); } }
[b]运行结果:[/b]
2
[b]参考资料:[/b]
1.《编程之法面试和算法心得》 July 著
相关文章推荐
- 数据结构与算法分析笔记与总结(java实现)--数组4:数组中出现次数超过一半的数字
- 算法--找出数组中出现次数超过一半的数
- 算法题005 剑指Offer面试题29 数组中出现次数超过一半的数字
- 算法题——数组中出现次数超过一半的数字
- 已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 数组中出现次数超过一半的数字的算法 程序员面试47
- 算法--找出数组中出现次数超过一半的数
- 面试算法(二十八)数组中出现次数超过一半的数字
- 找出整数数组中出现次数超过数组长度一半的元素(Java)
- 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 数组中出现次数超过一半的数字[算法]
- 程序员面试题精选100题(47)-数组中出现次数超过一半的数字[算法]
- 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。
- 微软等数据结构+算法面试100题(23)--数组中超过出现次数超过一半的数字
- 已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。
- 算法题:数组中出现次数超过一半的数字
- 【算法习作】已知有一个数字在某数组中出现次数超过一半,求这个数
- 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数