您的位置:首页 > 其它

算法:查找过半元素

2010-07-09 16:27 99 查看
在一个规模为N的数组A中,所谓过半元素就是出现次数大于N/2的元素,例如 3, 3, 4, 2, 4, 4, 2, 4, 4 有一个过半元素4。给出一个算法,如果过半元素存在,就找出来,否则给出报告,要求给出O(N)的算法。

import java.util.HashMap;

public class IntegerCount {

/**

* @param args

*/

public static void count(int[] array) {

int r = -1;

HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

for (int i = 0; i < array.length; i++) {

Integer value = map.get(array[i]);

if (value == null) {

map.put(array[i], 1);

} else if (value.intValue() >= array.length / 2) {

r = i;

break;

} else {

map.put(array[i], value.intValue() + 1);

}

}

if (r < 0) {

System.out.println("数组中无过半元素");

} else {

System.out.println("过半元素: " + array[r]);

}

}

public static void find(int[] array) {

int sum = 0;

int x = array[0];

for (int i = 1; i < array.length; i++) {

if (array[i] == x) {

sum = sum + 1;

} else {

sum = sum - 1;

}

if (sum < 0) {

x = array[i];

sum = 0;

}

}

if (x == array[array.length - 1] && sum == 0) {

System.out.println("数组中无过半元素");

} else {

System.out.println("过半元素: " + x);

}

}

public static void main(String[] args) {

int[] array0 = { 3, 3, 4, 2, 4, 4, 2, 4, 4 };

int[] array1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

int[] array2 = { 0, 0, 3, 0, 0, 0, 0, 0, 9 };

count(array0);

count(array1);

count(array2);

find(array0);

find(array1);

find(array2);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐