朋友面试字节跳动-头条的技术笔试水坑积水的问题。感觉很有趣。试着用自己的javascript知识提供一些解题算法思路。
有一组不同高度的台阶,由一个整数数组表示,数组中每个数是台阶的高度。当开始下雨了(足够多),台阶之间的水坑会积多少水呢?
如下图,可以表示为数组[0,1,0,2,1,0,1,3,2,1,2,1],返回积水量6。
解题思路:
1 什么样的条件才能积水?
有凹的地方才能积水。
2 怎么判定凹?
左右凸起中间低即为凹。
3 只有两种状态是否可用二进制表示?
可以1凸0为凹,左右两边边界为凹时不考虑。
图例
以上图例,凹地分别是A,C,E,凸地分别是B,D
但A,E为边界,不能计为有效凹地
即此例中只有C能积水一个单位
如何计算台阶的高度影响
图例
B为整数3时,计算为1