arrays - 将最大元素带到矩阵中心所需的最小相邻交换次数
问题描述
我们有一个 m 行 n 列的矩阵,对于 m 和 n 的偶数值,我们有 4 个中心。我们需要找到最小值。将最大元素带到矩阵中心所需的交换次数。可以使用水平和垂直相邻的元素进行交换。
import java.util.ArrayList;
import java.util.Scanner;
public class solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-- > 0) {
int m = sc.nextInt();
int n = sc.nextInt();
int[][] arr = new int[m][n];
int max = Integer.MIN_VALUE;
ArrayList<Integer> x = new ArrayList<>();
ArrayList<Integer> y = new ArrayList<>();
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = sc.nextInt();
if (arr[i][j] > max)
max = arr[i][j];
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (arr[i][j] == max) {
x.add(i);
y.add(j);
}
}
}
ArrayList<Integer> centreX = new ArrayList<>();
ArrayList<Integer> centreY = new ArrayList<>();
if (m % 2 != 0 && n % 2 != 0) {
centreX.add(m / 2);
centreY.add(n / 2);
}
if (m % 2 == 0 && n % 2 == 0) {
centreX.add(m / 2);
centreY.add(n / 2);
centreX.add((m / 2) - 1);
centreY.add(n / 2);
centreX.add(m / 2);
centreY.add((n / 2) - 1);
centreX.add((n / 2) - 1);
centreY.add((m / 2) - 1);
}
if (m % 2 == 0 && n % 2 != 0) {
centreX.add(m / 2);
centreY.add(n / 2);
centreX.add((m / 2) - 1);
centreY.add(n / 2);
}
if (m % 2 != 0 && n % 2 == 0) {
centreX.add(m / 2);
centreY.add(n / 2);
centreX.add(m / 2);
centreY.add((n / 2) - 1);
}
int min_swap = Integer.MAX_VALUE;
for (int i = 0; i < x.size(); i++) {
for (int j = 0; j < centreX.size(); j++) {
int swap = Math.abs(x.get(i) - centreX.get(j)) + Math.abs(y.get(i) - centreY.get(j));
if (swap < min_swap)
min_swap = swap;
}
}
System.out.println(min_swap);
}
}
}
我正在接受输入,然后根据矩阵的维数 m 和 n 计算矩阵的中心。它正在通过示例案例,但其他案例则失败了。
解决方案
我在空闲时间逐行检查了代码
centreX.add((n / 2) - 1);
centreY.add((m / 2) - 1);
我的部分代码应该修改为
centreX.add((m / 2) - 1);
centreY.add((n / 2) - 1);
哇!所有测试用例都通过了。
推荐阅读
- python - Python:如何使用字符串按名称设置函数参数
- python - 为什么python没有main函数?
- c++ - BST,改变所有节点的数据值
- algorithm - 来自未排序点数组的近似线段
- javascript - 将JS合并为一个文件后,slick不起作用
- ios - Xcode 12 - AppName 的架构 (arm64) 不包括 iPhone 11 Pro 可以执行的架构(英特尔 64 位)
- javascript - mapbox-gl 中的集群属性
- javascript - 简单的 React 文件上传,不附加表单数据
- javascript - 从本地主机上的不同端口获取错误
- java - 使用 JavaServer Pages (jsp) 创建下拉导航栏