Java mxn矩阵中心的索引。如果“中心”不存在,则返回最接近具有最高整数的中心的正方形的索引

Java mxn矩阵中心的索引。如果“中心”不存在,则返回最接近具有最高整数的中心的正方形的索引,java,arrays,matrix,Java,Arrays,Matrix,尝试编写一个返回MxN矩阵中心的方法,如果该中心不存在,该方法应返回最接近中心且具有最高整数值的平方的索引 例1- [[5, 7, 8, 6, 3], [0, 0, 7, 0, 4], [4, 6, 3, 4, 9], [3, 1, 0, 5, 8]] 返回[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]] 返回[

尝试编写一个返回MxN矩阵中心的方法,如果该中心不存在,该方法应返回最接近中心且具有最高整数值的平方的索引

例1-

[[5, 7, 8, 6, 3],
 [0, 0, 7, 0, 4],
 [4, 6, 3, 4, 9],
 [3, 1, 0, 5, 8]]
返回[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]]
返回[1,2](中心不存在,因此距离中心最近的是[[0,7],[6,3]],7是最大值)

例3-

[[5, 7, 8],
 [0, 0, 7],
 [4, 6, 3]]
返回[1,1](中心存在)

private static int[]中心坐标(int[]矩阵){
int row=矩阵长度;
int col=矩阵[0]。长度;
if(行%2!=0&&col%2!=0&&row==col)
返回新的int[]{row/2,col/2};
if(行%2==0&&col%2==0&&row==col){
//计算内部平方的最大值如2。
返回新的int[]{x,y};
}
//哪一行!=col
}

我假设您在示例1中犯了一个错误,您给出了正确的答案,但我认为考虑的单元格应该只有[[7]、[3]],而不是3列宽

基本上,如果尺寸为偶数,则检查长度/2-1和长度/2

如果尺寸为奇数,则仅检查长度/2

绕一圈,带上马克斯

private static int[]中心坐标(int[]矩阵){
int row=矩阵长度;
int col=矩阵[0]。长度;
int[]ans=newint[]{row/2-(1-(row%2)),col/2-(1-(col%2))};
int best=Integer.MIN_值;

对于(int i=row/2-(1-(row%2));i在这种情况下,中心点仅存在于
m==n
且两者均为奇数的矩阵中。如果不满足此条件,则取中心区域
(m,n)

  • 偶数-从
    x/2
    length-x/2
  • 奇数-从
    x/2-1
    length-x/2+1
publicstaticvoidmain(字符串[]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}};
int[][]cr1=中央区域(m1);
int[][]cr2=中央区域(m2);
int[][]cr3=中央区域(m3);
Arrays.stream(cr1).map(Arrays::toString).forEach(System.out::println);
// [0, 7, 0]
// [6, 3, 4]
System.out.println(maxValue(cr1));//7
Arrays.stream(cr2).map(Arrays::toString).forEach(System.out::println);
// [0, 7]
// [6, 3]
System.out.println(maxValue(cr1));//7
Arrays.stream(cr3).map(Arrays::toString).forEach(System.out::println);
// [0]
}
公共静态int[]centralRegion(int[]arr){
如果(arr.length==arr[0]。length&&arr.length%2!=0){
返回新的int[][{{arr[arr.length/2][arr[0].length/2]};
}否则{
返回数组.流(arr,cp(arr.length),arr.length-cp(arr.length))
.map(行->数组)
.stream(行,cp(行长度),行长度-cp(行长度))
.toArray())
.toArray(int[]]::新建);
}
}
公共静态整数cp(整数长度){
返回长度/2-长度%2==0?0:1;
}
公共静态int-maxValue(int[]arr){
返回Arrays.stream(arr).flatMapToInt(Arrays::stream).max().getAsInt();
}