Java实现 找出数组中出现次数超过数组长度一半的元素
2012-10-16 01:34
756 查看
简述 :
给定一个数组,找出数组中元素出现次数超过数组长度一半的元素
如数组:
[4, 3, 2, 1, 1, 1, 1, 1, 1, 0 ]
其中超过一半的元素就是 1
两种实现的 算法描述:
1) 用快排中的Partition,分割数组直到找到pos等于数组正当中的那个元素,返回那个索引的值
2) 可以考虑成,结果的那个值对抗不等于结果的那个值,两方面打擂台,最后谁还留在台上,谁就是最后的解
代码:
输出:
给定一个数组,找出数组中元素出现次数超过数组长度一半的元素
如数组:
[4, 3, 2, 1, 1, 1, 1, 1, 1, 0 ]
其中超过一半的元素就是 1
两种实现的 算法描述:
1) 用快排中的Partition,分割数组直到找到pos等于数组正当中的那个元素,返回那个索引的值
2) 可以考虑成,结果的那个值对抗不等于结果的那个值,两方面打擂台,最后谁还留在台上,谁就是最后的解
代码:
package offer; /** * In one array, there may be one element, its occurrence is more * than half of the array size, so use these two methods to get * the OccurrenceMoreThanHalf number */ public class OccurrenceMoreThanHalf { public static void main(String[] args) { int array[] = new int[10]; for(Integer i = 0; i < 5; i++) array[i] = 4 - i; for(Integer i = 0; i < 5; i++) array[i + 4] = 1; System.out.print("Raw Array Data: ["); for(Integer i : array){ System.out.print(i + ", "); } System.out.println("]"); System.out.println("Get Number Through Method_1: " + getNumMethod_1(array)); System.out.println("Get Number Through Method_2: " + getNumMethod_2(array)); } public static int getNumMethod_1(int array[]){ int middle = array.length >> 1; int start = 0; int end = array.length - 1; int pos = Partition(array, start, end); while(pos != middle){ if(pos < middle){ start = pos + 1; pos = Partition(array, start, end); } else{ end = pos - 1; pos = Partition(array, start, end); } } return array[pos]; } public static int Partition(int array[], int start, int end){ int baseValue = array[start]; int basePos = start; for(int i = start + 1; i <= end; i++){ if(array[i] < baseValue){ basePos++; Swap(array, i , basePos); } } Swap(array, start, basePos); return basePos; } public static void Swap(int array[], int pos1, int pos2){ int temp = array[pos1]; array[pos1] = array[pos2]; array[pos2] = temp; } public static int getNumMethod_2(int array[]){ if(array.length == 0) throw new IllegalArgumentException(); int resultNum = array[0]; int occurrence = 0; for(int i = 0; i < array.length; i++){ if(array[i] == resultNum) occurrence++; else{ if(--occurrence == 0) resultNum = array[i]; } } return resultNum; } }
输出:
相关文章推荐
- 找出整数数组中出现次数超过数组长度一半的元素(Java)
- 数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数。java实现
- Java实现——求整数数组中出现次数超过数组长度一半的元素
- 找出数组中出现次数超过数组长度一半的元素—-腾讯
- 剑指Offer-29-java实现查找数组中出现次数超过一半的元素
- PHP实现找出数组中出现次数超过数组长度一半的数字算法示例
- 找出数组中出现次数超过数组长度一半的元素
- java实现找出数组中出现次数超过一半的数字
- 在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素。
- C++数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
- C++数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。(牛客剑指offer)
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- 找出数组中出现次数超过数组长度一半(>=1/2 >1/3)的那个数
- 基于Java代码实现数字在数组中出现次数超过一半
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字
- 数组中出现次数超过一半的数字(Java实现)
- 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)
- 找出数组中出现次数超过一半的元素