グループ化するユーザーのエンドレスアルゴリズム

ありnは、ユーザーが活動に参加し、自分のID から0 までのn - 1は、各ユーザーは、ユーザーの特定のグループに属していることを起こります。あなたは長与えるn個の配列groupSizes あなたは(各グループ内のユーザの存在だけでなく、ユーザグループをグループ化し、ユーザーに戻り、各ユーザーのユーザー・グループのサイズが含まれ、ID )。

 

あなたは、任意の順序ソリューションを返すことができます IDの順序は限定されるものではありません。さらに、対象データ解析は、少なくとも一つの解決策が存在することを確実にします。

 

1

入力: groupSizes = [3 ,. 3 ,. 3 ,. 3 ,. 3 ,. 1 ,. 3。]

出力[5]、[0、1、2]、[3、4、6]

 

他の可能な解決策があります。

[2、1、6]、[5]、[0、4、3]

[5]、[0,6]、[2]、[4、3、1]]

 

2

入力: groupSizes = 2 ,. 1 ,. 3 ,. 3 ,. 3、2]

出力[1]、[0,5]、[2、3、4]

 

ヒント:

groupSizes.length == n個

1 <= N <= 500

1 <= groupSizes [I] <= N

 

アイデア:

使用ハッシュマップ

GROUPSIZE としてキーArrayListの(ArrayListを())のための値、ここで記憶された整数であるのuserId(ある、配列インデックス)

挿入戦略:

最初あるかどうかを決定するキーなしキー直接新しい生成のArrayList(のArrayListを()) 、およびサブ追加、ArrayListには挿入しながらUSERIDは

あるキー次いで引き抜か決意ArrayListの最後内部ArrayListの長さは、対応するに等しいかどうかをGROUPSIZE さらにそれらが等しい場合、新しいグループが追加され、または

ソリューション:

パブリッククラスTest {

    パブリック静的無効メイン(文字列[] args){

        System.out.println(groupThePeople(新しいINT [] {3,3,3,3,1,3,3}))。

    }

 

    プライベート静的HashMapの<Integer型、ArrayListの>このresultMap =新しいHashMapの<>();

 

    パブリック静的リスト<リスト<整数>> groupThePeople(INT [] groupSizes){

        ArrayListの<リスト<Integer型>>結果=新しいArrayListを<>();

    機能(){//スプレッドhttp://www.kaifx.cn/question/kaifx/1799.html

        {(; I <groupSizes.length I ++ INTがI = 0)するため

            (I、groupSizes [I])を加えます。

        }

        用(ArrayListのI:resultMap.values()){

            results.addAll(I);

        }

        結果を返します。

    }

 

    静的ボイド追加(INT番号、INT GROUPSIZE){

        IF(resultMap.get(GROUPSIZE)== NULL){

            ArrayListの<リスト<Integer型>>ここで、groupList =新しいArrayListを<>();

            一覧<整数>グループ=新しいArrayListを<>();

            group.add(ID)。

            groupList.add(群)

            resultMap.put(GROUPSIZE、ここで、groupList)。

        } else {

            ArrayList<List<Integer>> a = resultMap.get(groupSize);

            if (a.get(a.size() - 1).size() == groupSize ) {

                List<Integer> group=new ArrayList<>();

                group.add(id);

                a.add(group);

            } else {

                a.get(a.size() - 1).add(id);

            }

        }

    }

}

 


おすすめ

転載: blog.51cto.com/14511863/2464634