我正在编写一个函数,试图找到二维数组的中间,这是我到目前为止所得到的:
int findMiddle(int[][] grid,int [] m) {
int[] list = new int[grid.length*grid[0].length];
int listPos = 0;
for(int i = 0 ; i < grid.length; i++) {
for(int j = 0; j < grid.length; j++) {
list[listPos++] = grid[i][j];
}
}
int middle = m.length/2;
if (m.length%2 == 1) {
return m[middle];
} else {
return (m[middle-1] + m[middle]) / 2.0;
}
}
假设我有一个数组
{{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 0, 1}}
它应该返回 6,因为它是整数除法。 另外,这段代码中middle的定义是整个原始数组的中间整数(不用说是否已排序)。
我该怎么做? (我的代码也无法编译)
这会编译,并会给你序列中的中间数字,或者如果它分割中间的中间两个数字的平均值:
static double findMiddle(int[][] grid) {
int[] list = new int[grid.length*grid[0].length];
int listPos = 0;
for(int i = 0 ; i < grid.length; i++) {
for(int j = 0; j < grid[i].length; j++) {
list[listPos++] = grid[i][j];
}
}
int middle = list.length/2;
if ((list.length%2) == 1) {
return list[middle];
}
return (list[middle-1] + list[middle]) / 2.0;
}
但是,我怀疑您在将数字组合成一个数组后,在找到中间数字之前,需要对它们进行排序。 (正如 piyush121 评论的那样)
假设你对“中位数”的定义是正确的(奇数长度集合的中间数或偶数长度集合的两个中间数的平均值),并且如果 grid[][] 已排序,并且如果 grid[][ ] 是一个方阵(即 grid.length = grid[i].length 对于 0..length-1 中的所有 i,那么您不需要将数据复制到另一个数组。以下应该足够了:
static int findMiddle(int[][] grid) {
int l = grid.length;
if (l%2 == 1) {
return grid[l/2][l/2];
} else {
return (grid[l/2-1][l-1]+grid[l/2][0])/2;
};
查看现有代码,如果所有值都放入单个按行列表中,您似乎将“中位数”定义为矩阵中的中间值。换句话说,您不需要处理奇数行(当同一列中的两个数字位于中间时)或奇数行和列(当中间有四个数字时)。
如果该定义正确,那么您可以通过流式传输所有值然后选择中间的值来应对不均匀行的所有复杂性。
为了满足您的兴趣,这里有一个 Java 8 解决方案可以做到这一点:
int[] flat = Arrays.stream(grid).flatMapToInt(Arrays::stream).toArray();
double middle = Arrays.stream(flat).skip(flat.length / 2).limit(1 + flat.length % 2)
.average().getAsDouble();
[ To get the value of the center of Matrix ( 2-dimensional ) Array of an odd squared matrix Array ]
you have to follow these steps ;
1. Divide your array by 2 and check the remainder is equal to 1
2. Store it in a middle variable
3. Get value of Matrix[middle][middle] e.g ( 3 , 3 ) or ( 5 , 5 ) etc.
4. Return the value
----------------------------------------------------------------------------
public static int getMiddleValue(int[][] matrix) {
// Check if the array is not empty
if (matrix == null || matrix.length == 0 || matrix.length != matrix[0].length) {
return -1; // Invalid array
}
// Check if the number of rows and columns are odd
int numRows = matrix.length;
int numCols = matrix[0].length;
if (numRows % 2 == 0 || numCols % 2 == 0) {
return -1; // Not a square matrix with odd dimensions
}
// Find the middle index
int middleIndex = numRows / 2;
// Retrieve the middle value`enter code here`
int middleValue = matrix[middleIndex][middleIndex];
return middleValue;
}