您的位置:首页 > 编程语言

编程之美-寻找发帖"水王"

2008-10-26 15:18 288 查看
第一个简单的案例,一个家伙在论坛里每个人都回复了,其占所有帖子的总量超过了一半,快速找到这个ID

原文地址:http://www.java2000.net/p11239
/**
* 编程之美-寻找发帖"水王"。<br>
* 每个帖子均有回复,总发帖量超过一半了。找出这个人的ID.
*
* @author 赵学庆,Java世纪网(java2000.net)
*
*/
public class T {

/**
* 查找ID.
*
* @param id
* 所有帖子的作者ID
* @return
*/
public static int find(int[] id) {
int rtn = Integer.MIN_VALUE;
int nTimes, i;
for (i = nTimes = 0; i < id.length; i++) {
if (nTimes == 0) {
rtn = id[i];
nTimes = 1;
} else {
if (rtn == id[i]) {
nTimes++;
} else {
nTimes--;
}
}
}
return rtn;
}

public static void main(String[] args) {
int[] id = { 2, 3, 4, 5, 1, 2, 1, 3, 5, 7, 31, 3, 2, 2, 1, 12, 4, 56, 23, 12, 4, 1, 3, 4,
2, 2, 1, 3, 1, 23, 1, 5, 3, 1, 3, 12, 1, 2, 1, 1, 1, 2, 2, 2 };
System.out.println(find(id));
}
}

运行结果
1

寻找发帖"水王"的扩展问题,有3个ID,他们每个人的发帖量都超过了1/4,找到这3个新的"水王"

原文地址:http://www.java2000.net/p11241import java.util.Arrays;

/**
* 编程之美-查找超过1/4的3个ID-"发帖水王"扩展问题。<br>
* 每个帖子均有回复,总发帖量超过一半了。找出这个人的ID.
*
* @author 赵学庆,Java世纪网(java2000.net)
*
*/
public class TT {

/**
* 查找最多的三个ID.
*
* @param id
* 所有帖子的作者ID
* @return
*/
public static int[] find2(int[] id) {
int[] rtn = new int[3];
int[] nTimes = new int[3];
int i;
for (i = 0; i < 3; i++) {
rtn[i] = 0;
nTimes[i] = 0;
}
for (i = 0; i < id.length; i++) {
out: for (int k = 0; k < 3; k++) {
for (int m = 0; m < 3; m++) {
if (rtn[m] == id[i]) {
break out;
}
}
if (nTimes[k] == 0) {
rtn[k] = id[i];
break;
}
}

for (int k = 0; k < 3; k++) {
if (rtn[k] == id[i]) {
nTimes[k] += 3;
} else if (nTimes[k] > 0) {
nTimes[k]--;
}
}
}
return rtn;
}
public static void main(String[] args) {
int[] id = { 2, 3, 4, 5, 1, 2, 1, 3, 5, 7, 31, 3, 2, 2, 1, 12, 4, 56, 23, 12, 4, 1, 3, 4,
2, 2, 1, 3, 1, 23, 1, 5, 3, 1, 3, 12, 1, 2, 1, 1, 1, 2, 2, 2 };
System.out.println(Arrays.toString(find2(id)));
}
}

运行结果

[2, 1, 3]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: