は最低X整数を求めるためのヘルパークラスを使用して一般的な実装です。
3つの列を使用すると、ヘルパークラスのインスタンスが3つ作成され、データが反復されて各列の3つの最小値が収集されます。このコードの
利点は以下のとおりです。
- のみXが
- は整数をボックスする必要はありません
- はX
の高い値の性能向上のためのバイナリ検索を使用する値の最低を保持します
これは、速く、メモリフットプリントが小さく、無制限の量のデータ(ストリーミングされている場合)をサポートする必要があることを意味します。
デモ用のIDEONEを参照してください。
import java.util.Arrays;
class Ideone {
private static final int MIN_COUNT = 3;
public static void main(String[] args) {
int[][] data = { { 74, 85, 123 },
{ 73, 84, 122 },
{ 72, 83, 121 },
{ 70, 81, 119 },
{ 69, 80, 118 },
{ 76, 87, 125 },
{ 77, 88, 126 },
{ 78, 89, 127 } };
// Initialize min collectors
Min[] min = new Min[data[0].length];
for (int col = 0; col < min.length; col++)
min[col] = new Min(MIN_COUNT);
// Collect data
for (int row = 0; row < data.length; row++)
for (int col = 0; col < min.length; col++)
min[col].add(data[row][col]);
// Print result
for (int i = 0; i < MIN_COUNT; i++) {
for (int col = 0; col < min.length; col++)
System.out.printf("min%d = %-5d ", i + 1, min[col].get(i));
System.out.println();
}
}
}
class Min {
private int[] min;
public Min(int count) {
this.min = new int[count];
Arrays.fill(this.min, Integer.MAX_VALUE);
}
public void add(int value) {
int idx = Arrays.binarySearch(this.min, value);
if (idx != -this.min.length - 1) { // not insert at end
if (idx < 0)
idx = -idx - 1;
System.arraycopy(this.min, idx, this.min, idx + 1, this.min.length - idx - 1);
this.min[idx] = value;
}
}
public int get(int index) {
return this.min[index];
}
}
申し訳ありませんが、私はあなたが何を求めているのか分かりません。あなたは直面している問題を明確にすることができますか? 「結果が効率的でない」とはどういう意味ですか? – Pshemo
各列の3つの最小要素を検索しようとしていますか? –
@ PM77-1私は、OPに必要なのは彼のデータ構造と質問が少し不明だと思います。 –