高级农民
- 积分
- 2318
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-2-21
- 最后登录
- 1970-1-1
|
有点难描述,我把我代码发上来了,是不是bug-free不敢保证,当时也是debug了好久才弄成这样的.
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- PrintMountain pm = new PrintMountain();
- //pm.print(new int[] {5,4,2,1,2,3,2,1,0,1,2,3,4});
- pm.dumpWater(new int[] {5,4,2,1,2,3,2,1,0,1,2,3,4}, 1, 8);
- }
-
-
- public void print(int[] heights) {
- int maxHeight = 0;
- for (int h : heights) {
- maxHeight = Math.max(h, maxHeight);
- }
- for (; maxHeight >= 0; maxHeight--) {
- StringBuilder line = new StringBuilder();
- for (int i = 0; i < heights.length; i++) {
- if (heights[i] >= maxHeight) {
- line.append("+");
- } else {
- line.append(" ");
- }
- }
- System.out.println(line.toString());
- }
- }
-
- public void dumpWater(int[] heights, int dropLocation, int waterAmount) {
- int[] originalHeights = new int[heights.length];
- for (int i = 0; i < heights.length; i++) {
- originalHeights[i] = heights[i];
- }
- int maxHeight = 0;
- for (int h : heights) {
- maxHeight = Math.max(h, maxHeight);
- }
- while (waterAmount > 0) {
- // find lowest index from left
- int dropIndexLeft = dropLocation;
- int dropIndexRight = dropLocation;
- for (int i = dropLocation; i > 0; i--) {
- if (heights[i - 1] <= heights[i]) {
- dropIndexLeft = i - 1;
- } else {
- break;
- }
- }
- for (int i = dropLocation; i < heights.length - 1; i++) {
- if (heights[i + 1] <= heights[i]) {
- dropIndexRight = i + 1;
- } else {
- break;
- }
- }
- int dropIndex = heights[dropIndexLeft] < heights[dropIndexRight] ? dropIndexLeft : dropIndexRight;
- heights[dropIndex]++;
- waterAmount--;
- }
- int newMaxHeight = 0;
- for (int h : heights) {
- newMaxHeight = Math.max(h, newMaxHeight);
- }
- for (; newMaxHeight >= 0; newMaxHeight--) {
- StringBuilder line = new StringBuilder();
- for (int i = 0; i < heights.length; i++) {
- if (heights[i] >= newMaxHeight && heights[i] > originalHeights[i]) {
- line.append('w');
- heights[i]--;
- } else if (originalHeights[i] >= newMaxHeight) {
- line.append("+");
- } else {
- line.append(" ");
- }
- }
- System.out.println(line.toString());
- }
-
- //print(heights);
- }
复制代码
补充内容 (2019-4-5 06:05):
printMountain是个warm up, 打印的是没有水的情况,follow up是写dumpWater这个功能,卡了很久怎么显示w |
|