2017-02-25 60 views
0

我试图编写一个在二维数组中找到元素的分而治之算法。int在调用函数时不能转换为int [] []

函数原型:

public boolean searchMatrix(int[][] matrix, int target) 

调用:

x=searchMatrix(matrix[(rows-1)/2][columns],target); 

误差是在调用这个中断不能被转换成INT [] []

行是在开始时作为矩阵来计算.length和列为矩阵[0] .length

+0

您正在查找数组'matrix'中的int,然后使用它调用该方法。该方法期望对数组的引用,而不是int。因此编译器抱怨。 – pvg

+0

'matrix [(rows-1)/ 2] [columns]'是存储在特定位置的整数,而不是数组。你想用这种说法达到什么目的?从偏移量开始传递数组? – fvu

+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); 
+0

如果我试图使用分割和征服我每次都必须这样做? –

+0

查看我编辑的“分而治之”要求。 – VHS

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); 
+0

他想要分而治之......也许他应该通过起跑专栏和排行榜。 – 2017-02-26 00:43:57

+0

@JawadLeWywadi,是的,这是一个更好的主意。 OP似乎要求他只发送列的前半部分不变,但我想通用答案总是更有用。 –