前几天看到阿里数据公众号有个技术题, 刚一开始以为结束了,一问还有最后一天,刚开始本想用sql来解答了,因为工作中,很难碰到烧脑的内容,不锻炼锻炼自己怕脑子不够使, 当时感觉比较容易,但sql想了下一些公用变量的东西不好弄,因此,还是决定用java来完成它,毕竟,java中的变量中的地址传递还是比较好弄的。
题目请看这里》》
附上java内容:
-
public class Jis {
-
-
/**
-
* 整体思路: 下雨后地面有多个小水坑,有高有低,有大有小
-
* 1,能藏水的说明边上有墙围着,相同小水坑都有相同高度的墙,把墙看成共享变量,只要连续的位置,最低的墙高度是相同的。 2,先外围全是墙,
-
* 如果位置的高度比周边的墙还高,那它自己也就是墙,否则自己的墙高度取周边的最低墙高度 3,最后遍历完就是把非墙的,用墙高度减自己高度的和。
-
*/
-
public static Point[][] sz2;
-
public static int maxQ = 999;
-
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
-
int[] sz = new int[] {
-
8, 8, 2, 8, 8,
-
8, 0, 0, 0, 8,
-
8, 8, 3, 8, 8,
-
8, 0, 0, 0, 8,
-
8, 8, 8, 4, 4
-
};
-
int idx = (int) Math.sqrt(sz.length);
-
// 初始二维数组
-
sz2 = new Point[idx][idx];
-
for (int i = 0; i < idx; i++)
-
for (int j = 0; j < idx; j++) {
-
sz2[i][j] = new Jis().new Point();
-
sz2[i][j].value = sz[i * idx + j];
-
if (i == 0 || i == idx - 1 || j == 0 || j == idx - 1) {
-
sz2[i][j].isQ = true;
-
sz2[i][j].getQheight().height = sz2[i][j].value;
-
} else {
-
sz2[i][j].getQheight().height = maxQ;
-
-
}
-
}
-
-
for (int i = 1; i < idx - 1; i++)
-
for (int j = 1; j < idx - 1; j++) {
-
// 根据周边的墙来设置自己
-
check(sz2[i][j], sz2[i - 1][j]);
-
check(sz2[i][j], sz2[i + 1][j]);
-
check(sz2[i][j], sz2[i][j - 1]);
-
check(sz2[i][j], sz2[i][j + 1]);
-
//这里说明自己就是墙了
-
if (sz2[i][j].value >= sz2[i][j].getQheight().height) {
-
Qheight qh = new Jis().new Qheight();
-
qh.height = sz2[i][j].value;
-
sz2[i][j].setQheight(qh);
-
-
sz2[i][j].isQ = true;
-
}
-
sz2[i][j].isCheck = true;
-
// 根据自己设置周边的墙
-
chage(sz2[i][j], sz2[i - 1][j]);
-
chage(sz2[i][j], sz2[i + 1][j]);
-
chage(sz2[i][j], sz2[i][j - 1]);
-
chage(sz2[i][j], sz2[i][j + 1]);
-
-
}
-
-
int all = 0;
-
//算总体积
-
for (int i = 0; i < idx; i++)
-
for (int j = 0; j < idx; j++) {
-
if (!sz2[i][j].isQ && sz2[i][j].getQheight().height > sz2[i][j].value)
-
all += sz2[i][j].getQheight().height - sz2[i][j].value;
-
}
-
System.out.println("=================" + all);
-
-
}
-
-
public static void check(Point a, Point b) {
-
if (a.getQheight().height > b.getQheight().height && (b.isQ || b.isCheck)) {
-
a.getQheight().height = b.getQheight().height;
-
}
-
}
-
-
public static void chage(Point a, Point b) {
-
-
if (!a.isQ && !b.isQ) {
-
b.setQheight(a.getQheight());
-
}
-
}
-
-
class Point {
-
int value;
-
Qheight qheight = new Qheight();
-
-
boolean isQ = false;
-
boolean isCheck = false;
-
-
public Qheight getQheight() {
-
return qheight;
-
}
-
-
public void setQheight(Qheight qheight) {
-
-
this.qheight = qheight;
-
}
-
-
}
-
-
class Qheight {
-
int height;
-
-
}
-
-
}
最后没想到还获奖了,获得一本 《大数据之路:阿里巴巴大数据实践》
虽然这本书前些日子刚买了,但还是要感谢这个活动。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/134308/viewspace-2143844/
,如需转载,请注明出处,否则将追究法律责任。