Pythonの数値リストから最長の符号交互サブシーケンスの長さを見つけるプログラム
numsと呼ばれる数値のリストがあるとすると、連続する各数値の符号を反転させる最長のサブシーケンスの長さを見つける必要があります。
したがって、入力がnums =[1、3、-6、4、-3]の場合、[1、-6、4、-3]を選択できるため、出力は4になります。
これを解決するには、次の手順に従います-
- pos:=0、neg:=0
- numsのnごとに、
- n <0の場合、
- neg:=pos + 1
- それ以外の場合、
- pos:=neg + 1
- n <0の場合、
- posとnegの最大値を返す
理解を深めるために、次の実装を見てみましょう-
例
class Solution: def solve(self, nums): pos = neg = 0 for n in nums: if n < 0: neg = pos + 1 else: pos = neg + 1 return max(pos, neg) ob = Solution() nums = [1, 3, -6, 4, -3] print(ob.solve(nums))
入力
[1, 3, -6, 4, -3]
出力
4
-
Pythonで二分木の最長交互パスの長さを見つけるプログラム
二分木があるとすると、左と右の子を交互に繰り返して下る最長のパスを見つける必要があります。 したがって、入力が次のような場合 交互のパスが[2、4、5、7、8]であるため、出力は5になります。 これを解決するには、次の手順に従います。 rootがnullの場合、 0を返す 関数dfs()を定義します。これには、ノード、カウント、フラグが必要です ノードがnullでない場合、 フラグがTrueと同じ場合、 a:=dfs(ノードの左側、カウント+ 1、False) b:=dfs(ノードの右側、1、True) それ以外の場合、フラグがFalseと同じ場合、 a:=dfs
-
Pythonの文字列のリストから最長の共通プレフィックスを見つけるプログラム
小文字の文字列のリストがあるとすると、最も長い共通プレフィックスを見つける必要があります。 したがって、入力が[antivirus、 anticlockwise、 antigravity]の場合、出力は antiになります。 これを解決するには、次の手順に従います- リストの単語をアルファベット順に並べ替える プレフィックス:=新しいリスト フラグ:=0 0から単語のサイズ[0]までの範囲のiの場合、実行 単語のjごとに、 j [i]がプレフィックスの最後の要素と同じでない場合、 プレフィックスから最後の要素を削除 フラグ:=1 ループから抜け出す フラグが1と同じ場合