我的评论

@杨建群
是的,也有很多两个的, 只是一部分超出的集合才用3个字节进行扩充的
楼主,你这个帖子都发了 几年了。。。不知道能否再看到我的回复呢。。。
package yang.twitter;

/**
* @author dy35978
*
*/
public class TwitterProcess {
private static int [] wallHeights = {1,6,1,2,3,4,100,1,9};
private static int result = 0;//最多装水
private static void process(int start, int end){
int firstWall = 0;//最高墙
int secondWall = 0;//次高墙
int firstIndex = 0;//最高墙下标
int secondIndex = 0;//次高墙下标
int maxIndex = 0;//较大下标
int minIndex = 0;//较小下标
//end-start<=1 不只是等于1,注意
if(end-start<=1){
return;
}
for(int i=0;i<end+1;i++){
if(wallHeights[i]>=firstWall){
secondWall = firstWall;
secondIndex = firstIndex;
firstWall = wallHeights[i];
firstIndex = i;
}else{
if(wallHeights[i]>=secondWall){
secondIndex = i;
secondWall = wallHeights[i];
}
}
}
maxIndex = secondIndex>firstIndex?secondIndex:firstIndex;// Math.min(firstIndex, secondIndex);
minIndex = secondIndex<firstIndex?secondIndex:firstIndex;// Math.max(firstIndex, secondIndex);
if(maxIndex-minIndex>1){
result =result+ secondWall*(maxIndex-minIndex-1);
for(int i=minIndex+1;i<maxIndex;i++){
result = result-wallHeights[i];
}
}
// 开始递归处理左侧墙距离开始位置能放多少水
process(start,minIndex);
// 开始递归处理右侧墙距离结束位置能放多少水
process(maxIndex,end);
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

process(0,wallHeights.length-1);
System.out.println("wallHeights结果:"+result);
}

}
re: Zelix KlassMaster 破解[未登录] blues 2009-01-24 20:37  
xbt@softbnd.com
可否给我一个,谢谢!!!
re: 关于蚂蚁问题(Ants) blues 2008-05-12 15:53  
二楼的数学式和证明我觉得有点晕,没细看。 原理应该也一样
至于为什么说27-3是最长,我中间跳跃一些而已。
就是观察分析了两端的蚂蚁后说的, A离左边3, E离右边4。
所以最长就是27-3=24。 上一句分析我省略了而已,SORRY。

最短:
我只是将五个蚂蚁的最短时间列出来而已, 最长时间列出来没意义了。
如果用式子总结便是: 最靠近杆中间点的那个蚂蚁的最短时间,即C距离左边。


@dreamingnest
re: 关于蚂蚁问题(Ants) blues 2008-05-12 14:22  
其实楼主的思想比较好,本人觉得这种题目根本不需要用程序来计算,
我认为还有更好的方法,我在原文给出了最长时间的分析。
这里我加上最短时间分析:

其实文中蚂蚁相撞两蚂蚁调头
可以这样看问题,如果相撞后,杆可以过两只蚂蚁
蚂蚁不调头,即擦肩而过,继续沿原来方向前进(与调头是一样的,只是换了一只蚂蚁而已)
这样问题就简化了,呵呵。
即所有蚂蚁中离杆其中一端最远的那只蚂蚁,即为最长时间。
即27-3=24

同理,最短时间为
所有蚂蚁使用时间:A最短是3, B最短是7, C最短11, D最短是10, E最短是4。
所以总的最短时间为11.

不知道小弟的思路是否正确?~~~~
其实文中蚂蚁相撞两蚂蚁调头
可以这样看问题,如果相撞后,杆可以过两只蚂蚁
蚂蚁不调头,即擦肩而过,继续沿原来方向前进(与调头是一样的,只是换了一只蚂蚁而已)
这样问题就简化了,呵呵。
即所有蚂蚁中离杆其中一端最远的那只蚂蚁,即为最长时间。
即27-3=24
呵呵,最短时间同理可以推出。。。略