Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで一意の要素を持つ最長の連続するサブリストの長さを見つけるプログラム


numsと呼ばれる番号のリストがあり、すべての要素が一意であるとします。連続する要素を含む最長のサブリストの長さを見つける必要があります。

したがって、入力がnums =[3、6、7、5、4、9]の場合、サブリストは[3、6、7、5、4]であるため、出力は5になります。これには、すべての連続する要素が含まれます。 3から7まで。

これを解決するには、次の手順に従います-

  • ret:=0
  • 範囲0からnums-1のサイズのiの場合、do
    • lhs:=nums [i]
    • rhs:=nums [i]
    • 範囲iからnums-1のサイズのjの場合、do
      • lhs:=最小のlhsとnums [j]
      • rhs:=rhsとnumsの最大値[j]
      • (rhs --lhs)が(j --i)と同じ場合、
        • ret:=retの最大値と(j --i + 1)
  • return ret

理解を深めるために、次の実装を見てみましょう-

def solve(nums):
   ret = 0
   for i in range(len(nums)):
    lhs = nums[i]
   rhs = nums[i]
   for j in range(i, len(nums)):
      lhs = min(lhs, nums[j])
      rhs = max(rhs, nums[j])
      if rhs - lhs == j - i:
          ret = max(ret, j - i + 1)
   return ret

nums = [3, 6, 7, 5, 4, 9]
print(solve(nums))

入力

[3, 6, 7, 5, 4, 9]

出力

1

  1. Pythonでバイナリツリーの最長の連続パスの長さを見つけるプログラム

    二分木があるとしましょう。二分木で最長のパスを見つける必要があります。 したがって、入力が次のような場合 連続する最長のシーケンスが[2、3、4、5、6]であるため、出力は5になります。 これを解決するには、次の手順に従います- rootがnullの場合、 0を返す maxPath:=0 関数helper()を定義します。これはノードを取ります inc:=1、dec:=1 ノードの左側がnullでない場合、 [left_inc、left_dec]:=ヘルパー(ノードの左側) それ以外の場合、 [left_inc、left_dec]:=[0、0] ノード

  2. Pythonで連続する共通文字を含む部分文字列の長さを見つけるプログラム

    文字列sがあるとすると、同じ文字列を持つ最長の部分文字列の長さを見つける必要があります。 したがって、入力が「abbbaccabbbba」のような場合、4つの連続したbがあるため、出力は4になります。 これを解決するには、次の手順に従います- sのサイズが0の場合、 0を返す s:=s連結空白スペース ct:=1、tem:=1 範囲0からs-2のサイズのiの場合、実行 s[i]がs[i+ 1]と同じ場合、 tem:=tem + 1 それ以外の場合、 ct:=temとctの最大値 tem:=1 return ct 理解を深めるために、次の実装を見て