2017-02-25 44 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似乎要求他只發送列的前半部分不變,但我想通用答案總是更有用。 –