Mohammad S. Anwar が主催する Weekly Challenge は、開発者が 2 つのタスクを解決することで競うフレンドリーなコンテストです。学習、共有、楽しみを通じて、あらゆる言語とレベルの開発者の参加を奨励します。
タスク 2: The Weekly Challenge 300 のネストされた配列では、開発者はネストされた配列の最長の長さを見つけるよう求められます。
ウィークリー チャレンジ 300 の締め切りは、2024 年 12 月 23 日日曜日 23:59 (英国時間) です。偏見を避けるために、競技後にこの投稿を読むことを検討してください。
[0, n-1] の範囲内の数値の順列を含む長さ n の整数の配列 @int が与えられます。
次のルールに従って、セット set[i] = ints[i], ints[ints[i]], ints[ints[ints[i]]], ... を構築するスクリプトを作成します。
- set[i] の最初の要素は、要素 ints[i] の選択から始まります。
- set[i] の次の要素は ints[ints[i]]、次に ints[ints[ints[i]]] というようになります。
- set[i] で重複要素が発生する直前に追加を停止します。
セット set[i] の最長の長さを返します。
ウィークリー チャレンジ 300、タスク 2: ネストされた配列
例 1 と例 2 は、指定された入力に対して予想される出力を示しています。
Input: @ints = (5, 4, 0, 3, 1, 6, 2) Output: 4
ここでは、最長セットの 1 つ が設定されています[0]:
set[0] = {ints[0], ints[5], ints[6], ints[2]} = {5, 6, 2, 0}
Input: @ints = (0, 1, 2) Output: 1
def build_set_from_index(ints, starting_index): iset = [ ints[starting_index], ] for ints_index in range(1, len(ints)): pindex = iset[ints_index - 1] value = ints[pindex] if value in iset: break iset.append(value) return iset def return_longest_length(ints): max_length = 0 for i in range(0, len(ints)): iset = build_set_from_index(ints, i) iset_length = len(iset) if iset_length > max_length: max_length = iset_length return max_length
私のソリューションでは、build_set_from_index と return_longest_length の 2 つの関数を利用します。
build_set_from_index は、パラメータ ints と starting_index から構築された set[starting_index] を返します。 set[] を構築するために反復的なアプローチを使用しました。
私のアプローチは早朝と、set[] 構築ルールのその後の言い換えから生まれました。当初、これらのルールは複雑に思えました。しかし、きちんとした朝食とカフェインを摂取した後で例 1 を再確認すると、これらのルールがよりよく理解できました。また、次のような言い換えもできました。
言い換えたアプローチを使用すると、例 1 のように @ints から set[0] を対話的に構築することがさらに簡単になりました。
return_longest_length は、int から構成されるすべての set[] の最大長を見つけます。 build_set_from_index を利用して、0
この投稿では、タスク 1: ネストされた配列について説明し、その解決策を紹介しました。私の解決策は単純で、元のタスクをどのように言い換えたかによって主に情報を得ており、おいしい朝食の重要性を強調しています。
以上がThe Weekly Challenge の入れ子配列タスクに対する私の Python 言語ソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。