解决leetcode第3989题网格中保持一致的最大列数

3989.网格中保持一致的最大列数

难度:困难

问题描述:

给你一个大小为mxn的二维整数数组grid,和一个整数limit。

你可以从网格中移除零个或多个列,但必须至少保留一列。剩余列的相对顺序必须保持不变。

如果对于每一行i,以及每一对相邻的剩余列a和b(其中a<b),都满足|gridib-gridia|<=limit,则称该网格是一致的。返回网格成为一致的所能保留的最大列数。

示例1:

输入:grid=\[-2,0,3],limit=2

输出:2

解释:

移除列2并保留列0和列1,得到|grid01−grid00|=|0−(−2)|=2<=limit。

因此,最多可以保留2列。

示例2:

输入:grid=\[1,-1,1,2,2,2],limit=1

输出:2

解释:

移除列1并保留列0和列2,得到

|grid02−grid00|=|1−1|=0<=limit且

|grid12−grid10|=|2−2|=0<=limit。

因此,最多可以保留2列。

示例3:

输入:grid=\[-5,5],limit=9

输出:1

解释:

移除列0或列1之一,因为|grid01−grid00|=|5−(−5)|=10>limit。

因此,最多可以保留1列。

提示:

1<=m==grid.length<=250

1<=n==gridi.length<=250

-105<=gridij<=10**5

0<=limit<=10**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。主程序中通过二重循环,构造满足条件所有数组,找出数组长度的最大值,即为问题的解。

程序如下:

python 复制代码
#将一个m*n的二维数组进行处理,输出各列的二维数组并返回
def turn_to_column_wise_array(a):
    n=len(a[0])
    b=list([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):
    n=len(a)
    for i in range(n):
        if abs(a[i]-b[i])>limit:
            return False
    else:
        return True

#主程序
grid=eval(input('pls input grid='))
limit=int(input('pls input limit='))
b=turn_to_column_wise_array(grid)
n=len(b)
m=0
for i in range(n):
    if n-i+1<m:
        break
    t=[b[i]]
    a=b[i]
    for j in range(i+1,n):
        if check_the_abs_of_poor_if_less_than_or_equal_limit(a,b[j],limit):
            t.append(b[j])
            a=b[j]
    c=len(t)
    if c>m:
        m=c
print(m)

运行实例一

pls input grid=\[1,2,3,4,5,2,5,3,2,4]

pls input limit=1

2

运行实例二

pls input grid=\[1,5,6,2,3,7,8,2,4,5,3,2,4,3]

pls input limit=1

4

相关推荐
段一凡-华北理工大学6 小时前
工业智能体:从Codex/Claude到项目实战~系列文章05:从“AI助手“到“工业智能体“:能力跃迁与落地范式
人工智能·python·claude·codex·工业智能体·高炉炼铁智能化
深蓝AI6 小时前
ContextVar 到线程池就丢了?asyncio.to_thread 和 run_in_executor 实测
python
岁月宁静7 小时前
什么是 Agent:从"会聊天"到"会做事"
人工智能·python
岁月宁静8 小时前
AI 应用开发工程师简历怎么写:HR 初筛、技术复筛、面试追问,三道关卡各看什么?
人工智能·python·面试
来让爷抱一个8 小时前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
小肝一下10 小时前
3.基础语法(3)
python
Dream it possible!10 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊10 小时前
算法之双指针系列(一)
算法·leetcode
十二10 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
深蓝AI10 小时前
Python 子进程树:父进程被杀后,孙进程为何还在跑?
python