3989.网格中保持一致的最大列数难度困难问题描述给你一个大小为mxn的二维整数数组grid和一个整数limit。你可以从网格中移除零个或多个列但必须至少保留一列。剩余列的相对顺序必须保持不变。如果对于每一行i以及每一对相邻的剩余列a和b其中ab都满足|grid[i][b]-grid[i][a]|limit则称该网格是一致的。返回网格成为一致的所能保留的最大列数。示例1输入grid[[-2,0,3]],limit2输出2解释移除列2并保留列0和列1得到|grid[0][1]−grid[0][0]||0−(−2)|2limit。因此最多可以保留2列。示例2输入grid[[1,-1,1],[2,2,2]],limit1输出2解释移除列1并保留列0和列2得到|grid[0][2]−grid[0][0]||1−1|0limit且|grid[1][2]−grid[1][0]||2−2|0limit。因此最多可以保留2列。示例3输入grid[[-5,5]],limit9输出1解释移除列0或列1之一因为|grid[0][1]−grid[0][0]||5−(−5)|10limit。因此最多可以保留1列。提示1mgrid.length2501ngrid[i].length250-105grid[i][j]10**50limit10**5问题分析问题中给定的二维数组grid是按行排列的而处理是按列进行处理的所有为了处理方便首先应该将原来的数组转换成按列排列的数组这样便于按列进行比较处理为此设计函数turn_to_column_wise_array(a)其功能就是把原来按行呈现的数组a转换成按列呈现并返回转换之后的数组。转换之后按列呈现的数组就需要进行比较看选定的两列对应元素差的绝对值是否小于等于limit这通过函数check_the_abs_of_poor_if_less_than_or_equal_limit(a,b,limit)实现如果这个对应元素差的绝对值小于等于limit返回True否则返回False。主程序中通过二重循环构造满足条件所有数组找出数组长度的最大值即为问题的解。程序如下#将一个m*n的二维数组进行处理输出各列的二维数组并返回 def turn_to_column_wise_array(a): nlen(a[0]) blist([x[i] for x in a] for i in range(n)) return b #判断a、b两列各对应元素是否绝对值不大于limit如果是返回True否则返回False def check_the_abs_of_poor_if_less_than_or_equal_limit(a,b,limit): nlen(a) for i in range(n): if abs(a[i]-b[i])limit: return False else: return True #主程序 grideval(input(pls input grid)) limitint(input(pls input limit)) bturn_to_column_wise_array(grid) nlen(b) m0 for i in range(n): if n-i1m: break t[b[i]] ab[i] for j in range(i1,n): if check_the_abs_of_poor_if_less_than_or_equal_limit(a,b[j],limit): t.append(b[j]) ab[j] clen(t) if cm: mc print(m)运行实例一pls input grid[[1,2,3,4,5],[2,5,3,2,4]]pls input limit12运行实例二pls input grid[[1,5,6,2,3,7,8],[2,4,5,3,2,4,3]]pls input limit14