最近の求人応募の一環として、この問題の解決策をコーディングするように依頼されました。
与えられた、
- n=円の中に立っている人の数。
- k=毎回カウントする人数
各人には、一意の(増分)IDが与えられます。最初の人(最も低いID)から始めて、1からkまで数え始めます。
次に、kの人が削除され、円が閉じます。次の残りの人(排除された人に続く)は1からカウントを再開します。このプロセスは、勝者である1人だけが残るまで繰り返されます。
ソリューションは以下を提供する必要があります。
- サークルから削除された順序での各人のID
- 勝者のID。
パフォーマンスの制約:
- できるだけ少ないメモリを使用してください。
- ソリューションを可能な限り高速に実行します。
何年も前からCSコースで同じようなことをしたことを思い出しましたが、このテストの時点では詳細を思い出せませんでした。私は今、それが複数の解決策を伴うよく知られた古典的な問題であることに気づきました。(一部の人は単に「ウィキペディア」の答えかもしれないので、まだ名前で言及しません)。
私はすでに解決策を提出しているので、私のために答えてくれる人を絶対に探していません。私は少し後でそれを提供します/他の人がいくつかの答えを提供した場合。
この質問をするための私の主な目標は、要件と制約を考慮して、私のソリューションが他のソリューションとどのように比較されるかを確認することです。
(「クラシック」ソリューションの一部が無効になる可能性があるため、要件に注意してください。)