ホームページ >バックエンド開発 >Python チュートリアル >The Weekly Challenge の入れ子配列タスクに対する私の Python 言語ソリューション

The Weekly Challenge の入れ子配列タスクに対する私の Python 言語ソリューション

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-28 11:59:10766ブラウズ

My Python Language Solution to Task Nested Array from The Weekly Challenge

1. はじめに

Mohammad S. Anwar が主催する Weekly Challenge は、開発者が 2 つのタスクを解決することで競うフレンドリーなコンテストです。学習、共有、楽しみを通じて、あらゆる言語とレベルの開発者の参加を奨励します。

タスク 2: The Weekly Challenge 300 のネストされた配列では、開発者はネストされた配列の最長の長さを見つけるよう求められます。

ウィークリー チャレンジ 300 の締め切りは、2024 年 12 月 23 日日曜日 23:59 (英国時間) です。偏見を避けるために、競技後にこの投稿を読むことを検討してください。

2. タスク 2: 入れ子になった配列

[0, n-1] の範囲内の数値の順列を含む長さ n の整数の配列 @int が与えられます。

次のルールに従って、セット set[i] = ints[i], ints[ints[i]], ints[ints[ints[i]]], ... を構築するスクリプトを作成します。

  1. set[i] の最初の要素は、要素 ints[i] の選択から始まります。
  2. set[i] の次の要素は ints[ints[i]]、次に ints[ints[ints[i]]] というようになります。
  3. set[i] で重複要素が発生する直前に追加を停止します。

セット set[i] の最長の長さを返します。

ウィークリー チャレンジ 300、タスク 2: ネストされた配列

例 1 と例 2 は、指定された入力に対して予想される出力を示しています。

例1

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}

例 2

Input: @ints = (0, 1, 2)
Output: 1

3. 私の解決策

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

build_set_from_index は、パラメータ ints と starting_index から構築された set[starting_index] を返します。 set[] を構築するために反復的なアプローチを使用しました。

私のアプローチは早朝と、set[] 構築ルールのその後の言い換えから生まれました。当初、これらのルールは複雑に思えました。しかし、きちんとした朝食とカフェインを摂取した後で例 1 を再確認すると、これらのルールがよりよく理解できました。また、次のような言い換えもできました。

  • set[i] は k 個の要素からなるセットです。
    • ルール 3 は k の値を制限します。
    • ルール 3 は、set[i] への要素の追加をいつ停止するかを決定します。
  • k = 0 での set[i] の値は ints[i] と等しくなります。
  • kの場合> 0、set[i] の k 番目の要素は、set[i] の (k-1) 番目の要素を使用してインデックス付けされた ints[] の値と等しくなります。

言い換えたアプローチを使用すると、例 1 のように @ints から set[0] を対話的に構築することがさらに簡単になりました。

  • k = 0 では、set[0] の値は ints[0] = 5 に等しくなります。set[0] には {5} が含まれます。
  • k = 1 では、set[0] の値は ints[5] = 6 に等しくなります。set[0] には {5, 6} が含まれます。
  • k = 2 では、set[0] の値は ints[6] = 2 に等しくなります。set[0] には {5, 6, 2} が含まれます。
  • k = 3 では、set[0] の値は ints[2] = 0 に等しくなります。set[0] には {5, 6, 2, 0} が含まれます
  • set[0] に ints[0] = 2 が含まれるため、k = 4 で停止します。

return_longest_length

return_longest_length は、int から構成されるすべての set[] の最大長を見つけます。 build_set_from_index を利用して、0

4. 結論

この投稿では、タスク 1: ネストされた配列について説明し、その解決策を紹介しました。私の解決策は単純で、元のタスクをどのように言い換えたかによって主に情報を得ており、おいしい朝食の重要性を強調しています。

以上がThe Weekly Challenge の入れ子配列タスクに対する私の Python 言語ソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。