编程之美-寻找发帖"水王"
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]
原文地址: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]
相关文章推荐
- 算法之寻找发帖"水王"
- 编程之美:寻找发帖"水王"
- 编程之美2.3 寻找发帖"水王"
- 编程之美:寻找发帖"水王" 扩展
- 编程之美2.3寻找发帖"水王"
- 《编程之美》读书笔记: 寻找发帖水王的扩展题
- 2.3 寻找发帖"水王"
- 打开未关联文件时,禁用 &quot;使用Web服务寻找适当的程序&quot;
- 编程之美:第二章 数字之魅 2.3寻找发帖水王
- 《编程之美》: 寻找发帖水王的扩展问题 2.3
- Thread.currentThread().getContextClassLoader().getResourceAsStream("myConfig.xml"));//在src下寻找myC
- 《编程之美》寻找发帖水王扩展问题的代码实现
- 算法->编程之美2.5 寻找最大的K个数
- 【Android小项目】找不同,改编自"寻找房祖名"的一款开源小应用。
- 编程之美 (寻找发帖水王)
- 编程之美2.3: 寻找发帖水王
- 《编程之美》之寻找发帖水王与JOJ 1069
- 打开"我的电脑"寻找项目?
- 编程之美2.3-寻找发帖水王
- 编程之美2.3 寻找发帖“水王”