您有一个大小为m * n的输入数组。数组中的每个单元格都用P或T填充。对数组唯一可以执行的操作是翻转列。翻转列时,该列的所有单元格中的字母都会切换(P变为T,反之亦然)。如果具有相同字母(例如PPPP)的行数为“ x”,那么您将得到一个分数。设计一种算法,该算法接受数组并返回解决方案(要翻转的列),以使生成的数组具有最大数量的点。
注意:如果有多个解决方案的得分最高,请选择翻转次数最少的解决方案。例:
输入数组:
PPTPP
PPTPP
PPTTP
PPPTT
PPPTT
输出:
3
说明:
一种产生最高点的解决方案:翻转列号。3
则原始数组为:
PPPPP // 1 point
PPPPP // 1 point
PPPTP
PPTTT
PPTTT
//Total: 2 points
请注意,也可以翻转第4列和第5列以获得2分,但这需要额外的翻转。
您可以使用任何方便的输入格式来表示二维数组,也可以使用任何两个不同但固定的值来表示P和T。
这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。