1

どうすればよいreduceですMap<Integer, List<Integer>>か?

' dreduceマップを、 の各IntegerList<Integer>が一意で重複しないマップとします。

例:

マップ A:

 0 --> (0)
 1 --> (1, 2) 
 2 --> (2, 1)

次のようになります。

 0 --> (0)
 1 --> (1, 2)

また

 0 --> (0)
 2 --> (2, 1)

reducedマップを作成するため、キー 1 または 2 の削除は許容されることに注意してください。

EDIT : 要素がそれ自体にマップされる場合、 のように分離したままにする必要があります0 --> 0。ただし、複数の値に共通の整数がある場合は、マージする必要があります。

4

3 に答える 3

1

これを試して

class ReducedMap extends HashMap<Integer, List<Integer>> {
    private Set<Set<Integer>> set = new HashSet<Set<Integer>>();

    @Override
    public List<Integer> put(Integer key, List<Integer> value) {
        Set<Integer> set = new HashSet<Integer>(value);
        if (!this.set.add(set)) {
            return new ArrayList<Integer>(set);
        }
        return super.put(key, value);
    }
      ...
于 2013-04-18T04:21:50.910 に答える
0

ArrayList を保持し、「マージ済み」と呼びましょう。

重複値を検出するには、HashSet を使用する必要があります。要素 (リスト内の値) が HashSet 内にあるかどうかを確認し、そうであれば無視します。

明らかに、このロジックの先頭にケースを追加して、要素がそれ自体にマップされているかどうかを考慮しないようにする必要があります。

アルゴリズムは次のようになります。

  1. 「ret」と呼ばれる Map> と「merged」と呼ばれる ArrayList と「duplicate_checker」と呼ばれる HashSet を宣言します。

  2. 入力 Map の各リストについて

    2.1 それ自体にマップする場合は、「ret」に入れます

    2.2それ以外の場合、現在のリストの各要素について、「duplicate_checker」にない場合はそこに配置して「merged」に追加します

  3. 「merged」を「ret」に入れます

  4. "ret" を返す

お役に立てれば。

于 2013-04-18T04:49:07.777 に答える