尝试编写一个返回mxn矩阵中心的方法,如果该中心不存在,则该方法应返回最接近中心且具有最高整数值的平方的索引
例1-
[[5, 7, 8, 6, 3],
[0, 0, 7, 0, 4],
[4, 6, 3, 4, 9],
[3, 1, 0, 5, 8]]
return[1,2](中心不存在,所以离中心最近的是[[0,7,0],[6,3,4]],7是最大值)
例2-
[[5, 7, 8, 6],
[0, 0, 7, 0],
[4, 6, 3, 4],
[3, 1, 0, 5]]
return[1,2](center不存在,所以离center最近的是[[0,7],[6,3]],7是最大值)
例3-
[[5, 7, 8],
[0, 0, 7],
[4, 6, 3]]
return[1,1](中心存在)
private static int[] centerCoordinates(int[][] matrix) {
int row = matrix.length;
int col = matrix[0].length;
if (row % 2 != 0 && col % 2 != 0 && row == col)
return new int[]{row / 2, col / 2};
if (row % 2 == 0 && col % 2 == 0 && row == col) {
//calculate the max of internal square Eg 2.
return new int[]{x, y};
}
//where row!=col
}
2条答案
按热度按时间jvlzgdj91#
我假设您在示例1中犯了一个错误,您给出了正确的答案,但我认为考虑的单元格应该只有[[7],[3]],而不是3列宽。
基本上如果尺寸是偶数,检查长度/2-1和长度/2。
如果尺寸为奇数,只检查长度/2。
绕过去,带上马克斯。
camsedfj2#
在这种情况下,中心点只存在于
m == n
两个都是奇数。如果不满足这个条件,那么就去中部地区(m, n)
:偶数-从
x / 2
至length - x / 2
奇数-从x / 2 - 1
至length - x / 2 + 1
```public static void main(String[] args) {
int[][] m1 = {
{5, 7, 8, 6, 3},
{0, 0, 7, 0, 4},
{4, 6, 3, 4, 9},
{3, 1, 0, 5, 8}};
int[][] m2 = {
{5, 7, 8, 6},
{0, 0, 7, 0},
{4, 6, 3, 4},
{3, 1, 0, 5}};
int[][] m3 = {
{5, 7, 8},
{0, 0, 7},
{4, 6, 3}};
}
public static int[][] centralRegion(int[][] arr) {
if (arr.length == arr[0].length && arr.length % 2 != 0) {
return new int[][]{{arr[arr.length / 2 + 1][arr[0].length / 2 + 1]}};
} else {
return Arrays.stream(arr, cp(arr.length), arr.length - cp(arr.length))
.map(row -> Arrays
.stream(row, cp(row.length), row.length - cp(row.length))
.toArray())
.toArray(int[][]::new);
}
}
public static int cp(int length) {
return length / 2 - length % 2 == 0 ? 0 : 1;
}
public static int maxValue(int[][] arr) {
return Arrays.stream(arr).flatMapToInt(Arrays::stream).max().getAsInt();
}