2017-02-25 29 views
0

2d配列の要素を見つける分割征服アルゴリズムをコーディングしようとしました。intをint [] []に変換することはできません

関数プロトタイプ:

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

呼び出し:このINTを呼び出すint型に変換することができないながら

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

エラーが[] []

行は行列として最初に計算されます.lengthとcolumnsとしての列[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) 

としてそれを呼び出す:同じ配列は、あなたは長さと高さを示すために、2つのパラメータを追加することができ

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

そして、最初の呼び出しは元の行数と列数を持ちます。

編集

あなたは、配列の異なる部分を通過したい場合は、行と列の数を伝える追加のパラメータを持つことができます。一般的には、これは何かの役に立つかもしれません。

x=searchMatrix(matrix, rowStartIndex, noOfRows, columnStartIndex, noOfColumns, target); 
+0

彼は征服の分裂を望んでいます...たぶん彼は開始列と行を渡す必要があります。 –

+0

@JawadLeWywadi、ええ、これは良い考えです。 OPは列の最初の半分だけを変更せずに送信するように求めていたようですが、一般的な答えはいつもより便利だと思います。 –

関連する問題