配列内のn個の異なる2次元点をカウントするためのアルゴリズムを設計するには

サロニアグラワル
public class IntersectionOfTwoSets {

public class Point implements Comparable{
    int x;
    int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public int compareTo(Object o) {
        if(this.x > ((Point)o).x) return 1;
        if(this.x < ((Point)o).x) return -1;
        if(this.y > ((Point)o).y) return 1;
        if(this.y < ((Point)o).y) return -1;
        return 0;
    }
}

public Point[] intersectionOf(Point[] a, Point[] b) {
    List<Point> result = new ArrayList<>();
    Arrays.sort(a);
    Arrays.sort(b);

    for(int i = 0, j = 0; i < a.length && j < b.length; ) {
        if(a[i].compareTo(b[j]) == 0) {
            result.add(a[i]);
            i++;
            j++;
        } else if (a[i].compareTo(b[j]) < 0) {
            i ++;
        } else {
            j ++;
        }
    }
    return (Point[])result.toArray();
}

n個の異なる2Dポイントを含む2つの配列aとbが与えられます。両方の配列に含まれるポイントの数をカウントするアルゴリズムを設計します(コードの理解の問題)このコードに関連する複数の質問があります。

  1. ネストされたクラスを作成するのはなぜですか?
  2. ステートメントのためにiとjをインクリメントするのではなく、bodyの場合にelseでiとjをインクリメントするのはなぜですか?
  3. mainメソッドはどのように2点配列のオブジェクトを作成しますか?

(誰かがこの質問に対するより良い解決策を持っているなら、それは本当にありがたいです。)

g6r6u

私はC ++を使用していますが、あなたの質問に答えることができます。アルゴリズムは大丈夫ですただし、アルゴリズムを理解するのに問題があることを反映するように質問を言い換える必要があります

1)ネストされたクラスを作成するのはなぜですか?
タイプの競合を回避するには

+- IntersectionOfTwoSets (class) ------+
|    |                                 |
|    o- Point (class)                  |
|    |                                 |
|    o- intersectionOf (function)      |
|                                      |
+--------------------------------------+

なしで実装できますが、これは非常に一般的な名前であり、プロジェクトに追加する予定のライブラリにすでに実装されている可能性IntersectionOfTwoSetsがあることに注意しPointてください。で実装PointするIntersectionOfTwoSetsと、実装が一意なります(namespaceC ++で知られている概念であり、その使用は優れたプログラミング手法と見なされます)


標準ループのための構文は次のとおりですforinit; condition; increment

ループ内で見つける代わりに、ループの増分コンポーネントが欠落していることを確認してください


2)i ++とj ++はintersectionOfメソッドにどのように実装されていますか?
i++単にi += 1;

これがコードの簡略版です

given two sets a & b
sort a & b
initialize empty array (result)
loop (...)
| if (a[i] == b[j])
|  add a[i] to result, then increment i & j
| if (a[i] < b[j])
|  increment i
| if (b[j] < a[i])
|  increment j
| if (i >= a.size()) or (j >= b.size())
|  stop
return result

整数のセットでアルゴリズムをテストしてみましょう

let a: [2, 1, 10, 9]
let b: [1, 5, 2, 7, 6]

let result: []

Arrays.sort(a); // a: [1, 2, 9, 10]
Arrays.sort(b); // b: [1, 2, 5, 6, 7]

loop(...)
| 1: add 1 to result, increment i & j
| 2: add 2 to result, increment i & j
| 3: (j == 2) increment only j (5 < 9)
| 4: (j == 3) increment only j (6 < 9)
| 5: (j == 4) increment only j (7 < 9)
| 6: (j == 5) stop because j >= b.size()

return result // [1, 2]

一連のポイントでも機能するはずです

3)mainメソッドはどのように2点配列のオブジェクトを作成しますか?
C ++では、構文は次のとおりです。

IntersectionOfTwoSets::Point a[n], b[n];
or
List<IntersectionOfTwoSets::Point> a, b;

しかし、Javaでは、ほぼ確実に次のようになります。

List<IntersectionOfTwoSets.Point> a, b;
or
IntersectionOfTwoSets::Point a = new IntersectionOfTwoSets::Point[n];
IntersectionOfTwoSets::Point b = new IntersectionOfTwoSets::Point[n];

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

リスト内の3つの異なる要素を見つけるためのO(log n)アルゴリズムを設計する

分類Dev

RAMに収まらない配列内の重複要素をカウントするための効率的なアルゴリズム

分類Dev

2つの異なる点のセットを区別するためのアルゴリズム?

分類Dev

2次元配列内の要素を比較するためのアルゴリズム

分類Dev

間隔内の数値の頻度をカウントするための効率的なアルゴリズム

分類Dev

なぜ配列をソートするために2つの異なるアルゴリズムを使用するのですか?

分類Dev

合計が値になる5つの要素の配列を検索するためのアルゴリズム

分類Dev

2つの異なる配列からのポイントを比較するための最も近いペアのアルゴリズム

分類Dev

リンクリスト内の発生をカウントするためのアルゴリズム

分類Dev

要素のすべての可能な順列を把握するためのアルゴリズムを設計するにはどうすればよいですか?

分類Dev

N個の頂点を持つポリゴンを使用して特定の形状を推定するためのアルゴリズムは何ですか?

分類Dev

整数グリッドの数をカウントするための効率的なアルゴリズム

分類Dev

ソートされた配列の部分的に絶対合計の中央値を計算するための効率的なアルゴリズム

分類Dev

N個の点をn個の間隔に入れるための最良のアルゴリズムは何ですか

分類Dev

2次元配列を検索するためのアルゴリズム

分類Dev

0と1を含むソートされた配列からゼロの数をカウントするためのアルゴリズム。

分類Dev

区間の配列をダウンサンプリングするためのアルゴリズム

分類Dev

範囲内の特定の整数で割り切れる数をカウントするためのより高速なアルゴリズム

分類Dev

指定された値まで合計する配列内の2つの要素を見つけるためのより良いアルゴリズム

分類Dev

配列/ベクトルで2番目に大きい数を選択するための時間計算量O(n * Log(n))のインプレースアルゴリズムはありますか?

分類Dev

特定の数をチェックするためのアルゴリズムは、特定の配列内の組み合わせの合計です。

分類Dev

カウントダウンスタイルの数学数パズルを計算するアルゴリズムを設計する方法

分類Dev

n個の要素をx個のグループに分散するための最良のアルゴリズム

分類Dev

2つの配列内の2つの要素の合計を検索するO(nlogn)のアルゴリズム

分類Dev

配列内の特定の要素を見つけるための2つの異なるアルゴリズムの開発

分類Dev

配列のすべてのサブシーケンスを生成するためのO(n ^ 2)アルゴリズムはありますか?

分類Dev

配列のすべてのサブシーケンスを生成するためのO(n ^ 2)アルゴリズムはありますか?

分類Dev

'a'と 'b'の値を見つけるための最適なアルゴリズムを設計する

分類Dev

より大きな配列セット内の個別の配列の数を見つけるためのJavaScriptの効率的なアルゴリズムはありますか?

Related 関連記事

  1. 1

    リスト内の3つの異なる要素を見つけるためのO(log n)アルゴリズムを設計する

  2. 2

    RAMに収まらない配列内の重複要素をカウントするための効率的なアルゴリズム

  3. 3

    2つの異なる点のセットを区別するためのアルゴリズム?

  4. 4

    2次元配列内の要素を比較するためのアルゴリズム

  5. 5

    間隔内の数値の頻度をカウントするための効率的なアルゴリズム

  6. 6

    なぜ配列をソートするために2つの異なるアルゴリズムを使用するのですか?

  7. 7

    合計が値になる5つの要素の配列を検索するためのアルゴリズム

  8. 8

    2つの異なる配列からのポイントを比較するための最も近いペアのアルゴリズム

  9. 9

    リンクリスト内の発生をカウントするためのアルゴリズム

  10. 10

    要素のすべての可能な順列を把握するためのアルゴリズムを設計するにはどうすればよいですか?

  11. 11

    N個の頂点を持つポリゴンを使用して特定の形状を推定するためのアルゴリズムは何ですか?

  12. 12

    整数グリッドの数をカウントするための効率的なアルゴリズム

  13. 13

    ソートされた配列の部分的に絶対合計の中央値を計算するための効率的なアルゴリズム

  14. 14

    N個の点をn個の間隔に入れるための最良のアルゴリズムは何ですか

  15. 15

    2次元配列を検索するためのアルゴリズム

  16. 16

    0と1を含むソートされた配列からゼロの数をカウントするためのアルゴリズム。

  17. 17

    区間の配列をダウンサンプリングするためのアルゴリズム

  18. 18

    範囲内の特定の整数で割り切れる数をカウントするためのより高速なアルゴリズム

  19. 19

    指定された値まで合計する配列内の2つの要素を見つけるためのより良いアルゴリズム

  20. 20

    配列/ベクトルで2番目に大きい数を選択するための時間計算量O(n * Log(n))のインプレースアルゴリズムはありますか?

  21. 21

    特定の数をチェックするためのアルゴリズムは、特定の配列内の組み合わせの合計です。

  22. 22

    カウントダウンスタイルの数学数パズルを計算するアルゴリズムを設計する方法

  23. 23

    n個の要素をx個のグループに分散するための最良のアルゴリズム

  24. 24

    2つの配列内の2つの要素の合計を検索するO(nlogn)のアルゴリズム

  25. 25

    配列内の特定の要素を見つけるための2つの異なるアルゴリズムの開発

  26. 26

    配列のすべてのサブシーケンスを生成するためのO(n ^ 2)アルゴリズムはありますか?

  27. 27

    配列のすべてのサブシーケンスを生成するためのO(n ^ 2)アルゴリズムはありますか?

  28. 28

    'a'と 'b'の値を見つけるための最適なアルゴリズムを設計する

  29. 29

    より大きな配列セット内の個別の配列の数を見つけるためのJavaScriptの効率的なアルゴリズムはありますか?

ホットタグ

アーカイブ