字节跳动-技术面试积水问题解题方法

200 阅读1分钟

有一组不同高度的台阶,由一个整数数组表示,数组中每个数是台阶的高度。当开始下雨了(足够多),台阶之间的水坑会积多少水呢?

如下图,可以表示为数组[0,1,0,2,1,0,1,3,2,1,2,1],返回积水量6。

aHR0cDovL3d3dy55c3N5Y20uY29tL3BlcnNvbmFsL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIwLzAzL3Rlc3RwYXBlci5qcGc.png

分別計算每一層的凹的個數
@Test
public void test3() {
   int[] array = new int[]{0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1, 0, 4};
   int total = 0;
   int c = 0;
   while (true) {
      int min = -1;
      for (int i = 0; i < array.length; i++) {
         if (array[i] - c > 0) {
            if (min > 0) {
               total += i - min - 1;
            }
            min = i;
         }
      }
      if (min < 0) {
         break;
      }
      c++;
   }

   JLogger.debug(total + "");
}