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

Pythonで合計が0である最長のサブリストの長さを見つけるプログラム


値1と-1の2つだけのリストがあるとします。合計が0である最長のサブリストの長さを見つける必要があります。

したがって、入力がnums =[1、1、-1、1、1、-1、1、-1、1、-1]のような場合、最長のサブリストは[-1]であるため、出力は8になります。 、1、1、-1、1、-1、1、-1]その合計は0です。

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

  • テーブル:=新しい空のマップ

  • cs:=0、max_diff:=0

  • 0からnums− 1のサイズのiの場合、実行します

    • cs:=cs + nums [i]

    • csが0と同じ場合、

      • max_diff:=最大i+1およびmax_diff

    • csがテーブルにある場合、

      • max_diff:=max_diffの最大値と(i − table [cs])

    • それ以外の場合

      • table [cs]:=i

  • max_diffを返す

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

class Solution:
   def solve(self, nums):
      table = {}
      cs = 0
      max_diff = 0
      for i in range(len(nums)):
         cs += nums[i]
         if cs == 0:
            max_diff = max(i + 1, max_diff)
         if cs in table:
            max_diff = max(max_diff, i − table[cs])
         else:
            table[cs] = i
      return max_diff
ob = Solution()
nums = [1, 1, −1, 1, 1, −1, 1, −1, 1, −1]
print(ob.solve(nums))

入力

[1, 1, −1, 1, 1, −1, 1, −1, 1, −1]

出力

8

  1. Pythonで最長のアナグラムサブシーケンスの長さを見つけるプログラム

    2つの小文字の文字列SとTがあるとすると、最長のアナグラムサブシーケンスの長さを見つける必要があります。 したがって、入力がS =helloworld、T =hellorldの場合、出力は8になります これを解決するには、次の手順に従います- c:=新しいマップ、d:=新しいマップ 0からaのサイズの範囲のiの場合、実行 cのa[i]の場合、 c [a [i]]:=c [a [i]] + 1 それ以外の場合 c [a [i]]:=1 0からbのサイズの範囲のiの場合、実行 dのb[i]の場合、 d [b [i]]:=

  2. Pythonで最も長いバランスの取れたサブシーケンスの長さを見つけるプログラム

    括弧「(」および「)」を含む文字列sがあるとすると、バランスの取れた括弧の最長のサブシーケンスの長さを見つける必要があります。 したがって、入力がs =())(()(の場合、出力は4になります。これは、 ()()のようなサブシーケンスを取ることができるためです。 これを解決するには、次の手順に従います- res:=0 n:=sのサイズ close:=0 n-1から0の範囲のiの場合、1ずつ減らします。 s[i]が)と同じ場合、 close:=close + 1 それ以外の場合 0の場合、 close:=close-1 r