我最近参加了一家公司的技术测试,他们提出了一个非常有趣的问题,即如何在二进制矩阵中识别形状。
练习的目标是创建一个算法,能够找到二进制矩阵中最大的X形状,并返回其长度。X的定义如下: - X由两条长度相等的对角线组成,它们共享一个唯一的点。 例如:
练习的目标是创建一个算法,能够找到二进制矩阵中最大的X形状,并返回其长度。X的定义如下: - X由两条长度相等的对角线组成,它们共享一个唯一的点。 例如:
101
010
101
包含3个有效字符的X,因此算法将返回3。
1001
0110
0110
1001
没有包含任何有效的 X,因此算法将返回1,因为长度为1的X是单个1。
我已经完成了这个练习,但是我实现了一个非常混乱的算法,时间复杂度估计为O(n3),对于非常大的矩阵来说是不好的且不适用。这种复杂性的很大一部分是我用来遍历矩阵的双重循环造成的。
我该如何编写更简洁的算法呢?我提出这个问题是出于个人兴趣,并需要改进我的技能和实际思考能力。