Pythonの特定のリストから最長の交互サブシーケンスの長さを見つけるプログラム
numsと呼ばれる数値のリストがあるとすると、2つの連続する数値の差が正と負の間で交互になる、最長のサブシーケンスのサイズを見つける必要があります。そして、最初の違いは正または負のいずれかです。
したがって、入力がnums =[6、10、4、2、3、9、4、7]のような場合、必要なサブシーケンスは[6、10、2、9、4]であるため、出力は6になります。 、7]であり、違いは[4、-8、7、-5、3]です。
これを解決するために、次の手順に従います&minuS;
- n:=numsのサイズ
- dp:=サイズ2nのリストで、1で埋めます
- ans:=0
- 0からnの範囲のiについては、
- 0からiの範囲のjについては、
- nums [j]
- dp [i、0] =dp [i、0]および(dp [j、1] + 1)の最大値
- nums [j]
- それ以外の場合、nums [j]> nums [i]の場合、
- dp [i、1] =dp [i、1]および(dp [j、0] + 1)の最大値
- 0からiの範囲のjについては、
- ans =ansの最大値、dp [i、0]およびdp [i、1])
例(Python)
理解を深めるために、次の実装を見てみましょう-
class Solution: def solve(self, nums): n = len(nums) dp = [[1] * 2 for _ in range(n)] ans = 0 for i in range(n): for j in range(i): if nums[j] < nums[i]: dp[i][0] = max(dp[i][0], dp[j][1] + 1) elif nums[j] > nums[i]: dp[i][1] = max(dp[i][1], dp[j][0] + 1) ans = max(ans, dp[i][0], dp[i][1]) return ans ob = Solution() nums = [6, 10, 4, 2, 3, 9, 4, 7] print(ob.solve(nums))
入力
[6, 10, 4, 2, 3, 9, 4, 7]
出力
6
-
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で指定されたリストからk個の最長の単語を検索する
さまざまな長さの多くの単語を含むリストから、上位n個の最長の単語を選択する必要があるシナリオがあります。この記事では、それを実現するためのさまざまなアプローチを紹介します。 count()およびsorted()を使用 まず、リストの要素を逆の順序で並べ替えて、リストの先頭で最も長い単語が使用できるようにします。次に、各単語の長さを見つけて、カウントの結果を変数に追加します。最後に、必要な最長の単語の数を切り取ります。 例 from itertools import count def longwords(l, x): c = count() &nb