我試圖編寫一個在二維數組中找到元素的分而治之算法。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
非常感謝你。我如何通過矩陣的某個部分? –