あり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);
}
}
}
}