5852. 最小化目标值与所选元素的差
难度中等3收藏分享切换为英文接收动态反馈
给你一个大小为 m x n
的整数矩阵 mat
和一个整数 target
。
从矩阵的 每一行 中选择一个整数,你的目标是 最小化 所有选中元素之 和 与目标值 target
的 绝对差 。
返回 最小的绝对差 。
a
和 b
两数字的 绝对差 是 a - b
的绝对值。
示例 1:
1 | 输入:mat = [[1,2,3],[4,5,6],[7,8,9]], target = 13 |
示例 2:
1 | 输入:mat = [[1],[2],[3]], target = 100 |
示例 3:
1 | 输入:mat = [[1,2,9,8,7]], target = 6 |
提示:
m == mat.length
n == mat[i].length
1 <= m, n <= 70
1 <= mat[i][j] <= 70
1 <= target <= 800
通过次数1,500
提交次数7,936
递归(超时)
1 |
|
记忆化搜索(超时)
1 | public int minimizeTheDifference(int[][] mat, int target) { |
动态规划
数组的范围是70,每个数字的最大值是70,可选的和最大为70*70=4900
对于每一行,如果某个和可以通过上一行的某个和加当前行的某个数字得到,那么当前的和是可达的。
计算完成后,最后一行的和如果可达,那么计算target与可达和的差的绝对值,取最小。
1 | public int minimizeTheDifference(int[][] mat, int target) { |