我需要一个执行以下操作的功能:
作为输入,它需要一个n×n的板,每个点都是空的,有黑色的石头或白色的石头,以及一个位置。
作为输出,它返回给定位置的最长序列的长度。如果该位置为空,则返回0.
例如,如果输入了该板。
BUUUU
WWWB
UUUUU
其中B是黑色石头,W是白色石头,U是空白点,输入的位置是(1,0),输出为3。
或者如果输入了这个板子:
BUUU
WUUU
BUUU
BUUU
且位置为0,3输出为零,因为该位置为空。如果位置为3,0,由于黑色列,输出将为2。
序列可以是水平,垂直或对角线。
这是我到目前为止所做的:
如果我有位置,我会上下,两侧和两条对角线。我一直在砍,直到我发现序列中断,然后返回最长的序列。例如,如果这是董事会:
WUU
WWU
WUU
并且该职位是1,0。我会侧身循环,发现最长的水平序列是1,对角循环,找到最长的序列是1然后垂直循环,找到最长的序列是3,因此返回3.
我怎样才能更快地完成这项工作?这个功能需要在一秒钟内调用大约1000万次。我目前的功能每秒可以执行大约800万次。
答案 0 :(得分:0)
这是O(n ^ 2)操作。以行主顺序迭代董事会。对于电路板上的每个位置,使用每个方向(水平,垂直和对角线)保持最长连续序列的3元组计数。当遇到占用位置时,检查所有相邻位置是否有连续序列,并增加最大长度如果该位置应该是所述序列的有效补充。祝你好运。