我试图编写一个划分和征服算法,在2d数组中找到一个元素。
功能原型:
public boolean searchMatrix(int[][] matrix, int target)
调用:
x=searchMatrix(matrix[(rows-1)/2][columns],target);
错误是在调用此int时无法转换为int [] []
行在开头计算为matrix.length,列为matrix [0] .length
答案 0 :(得分:1)
我想传递一半的数组
您可以从原始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);
答案 1 :(得分:1)
如果你想继续发送同一个数组,你可以添加两个参数来显示长度和高度:
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);