我试图编写一个在二维数组中找到元素的分而治之算法。int在调用函数时不能转换为int [] []
函数原型:
public boolean searchMatrix(int[][] matrix, int target)
调用:
x=searchMatrix(matrix[(rows-1)/2][columns],target);
误差是在调用这个中断不能被转换成INT [] []
行是在开始时作为矩阵来计算.length和列为矩阵[0] .length
我试图编写一个在二维数组中找到元素的分而治之算法。int在调用函数时不能转换为int [] []
函数原型:
public boolean searchMatrix(int[][] matrix, int target)
调用:
x=searchMatrix(matrix[(rows-1)/2][columns],target);
误差是在调用这个中断不能被转换成INT [] []
行是在开始时作为矩阵来计算.length和列为矩阵[0] .length
我想通过阵列
您可以从原来的matrix
阵列创建一个单独的半个阵列,并把它传递给你的searchMatrix
方法的一半。
int[][] halfMatrix = new int[(rows-1)/2][columns];
for(int i=0;i<(rows-1)/2; i++) {
for(int j=0;j<columns;j++) {
halfMatrix[i][j] = matrix[i][j];
}
}
x=searchMatrix(halfMatrix,target);
如果你想使用divide and conquer
战术,这可能不是从性能的角度来看确实卓有成效,你可以做到这一点通过以下方式:
int[][] halfMatrix = new int[(rows-1)/2][columns];
int[][] secondHalfMatrix = new int[(rows+1)/2][columns];
for(int i=0;i<(rows-1)/2; i++) {
for(int j=0;j<columns;j++) {
if(i<(rows-1)/2)
halfMatrix[i][j] = matrix[i][j];
else
secondHalfMatrix[i-(rows-1)/2][j] = matrix[i][j];
}
}
x=searchMatrix(halfMatrix,target) || searchMatrix(secondHalfMatrix,target);
如果我试图使用分割和征服我每次都必须这样做? –
查看我编辑的“分而治之”要求。 – VHS
如果你想继续发送中同一阵列,您可以添加两个参数,显示长度和高度:
public boolean searchMatrix(int[][] matrix, int rows, int cols, int target)
,后来将其称为:
x=searchMatrix(matrix,(rows-1)/2,columns,target);
而初始调用将具有原始行数和列数。
编辑
如果你想通过阵列的不同部分,你可以有一个额外的参数告诉行数和列数。一般来说,这可能是有用的。
x=searchMatrix(matrix, rowStartIndex, noOfRows, columnStartIndex, noOfColumns, target);
他想要分而治之......也许他应该通过起跑专栏和排行榜。 – 2017-02-26 00:43:57
@JawadLeWywadi,是的,这是一个更好的主意。 OP似乎要求他只发送列的前半部分不变,但我想通用答案总是更有用。 –
您正在查找数组'matrix'中的int,然后使用它调用该方法。该方法期望对数组的引用,而不是int。因此编译器抱怨。 – pvg
'matrix [(rows-1)/ 2] [columns]'是存储在特定位置的整数,而不是数组。你想用这种说法达到什么目的?从偏移量开始传递数组? – fvu
非常感谢你。我如何通过矩阵的某个部分? –