Pythonで連続して厳密に増加するサブリストの長さを見つけるプログラム
numsと呼ばれる数値のリストがあるとすると、リストから1つまたは0の要素を削除できるときに、連続する厳密に増加するサブリストの最大長を見つける必要があります。
したがって、入力がnums =[30、11、12、13、14、15、18、17、32]のような場合、リストから18を削除すると、[11、 12、13、14、15、17、32]これは最も長く、連続していて、厳密に増加するサブリストであり、その長さは7です。
これを解決するために、次の手順に従います-
-
n:=numsのサイズ
-
pre:=サイズnのリストと1で埋める
-
1からn-1の範囲のiの場合、実行
-
nums [i]> nums [i-1]の場合、
-
pre [i]:=pre [i-1] + 1
-
-
-
suff:=サイズnのリストで、1を入力します
-
n-2から-1の範囲のiの場合、1ずつ減少します
-
nums [i]
-
suff [i]:=suff [i + 1] + 1
-
-
-
ans:=preの最大値とsuffの最大値の最大値
-
1からn-1の範囲のiの場合、実行
-
nums [i-1]
-
ans:=ansの最大値と(pre [i-1] + suff [i + 1])
-
-
-
ansを返す
理解を深めるために、次の実装を見てみましょう-
例
class Solution: def solve(self, nums): n = len(nums) pre = [1] * n for i in range(1, n - 1): if nums[i] > nums[i - 1]: pre[i] = pre[i - 1] + 1 suff = [1] * n for i in range(n - 2, -1, -1): if nums[i] < nums[i + 1]: suff[i] = suff[i + 1] + 1 ans = max(max(pre), max(suff)) for i in range(1, n - 1): if nums[i - 1] < nums[i + 1]: ans = max(ans, pre[i - 1] + suff[i + 1]) return ans ob = Solution() nums = [30, 11, 12, 13, 14, 15, 18, 17, 32] print(ob.solve(nums))
入力
[30, 11, 12, 13, 14, 15, 18, 17, 32]
出力
7
-
Pythonで最長の個別のサブリストの長さを見つけるプログラム
numsという番号のリストがあり、そのすべての要素が一意である最も長い連続したサブリストの長さを見つける必要があるとします。 したがって、入力がnums =[6、2、4、6、3、4、5、2]のような場合、一意の要素の最長リストは[6、3、4、5]であるため、出力は5になります。 、2]。 これを解決するには、次の手順に従います- head:=0、dct:=新しいマップ max_dist:=0 各インデックスiとnumsの要素numについて、実行します =headの場合、 ヘッド:=dct [num] + 1 dct [num]:=i ma
-
Pythonで最大の合計を持つ連続したサブリストの合計を見つけるプログラム
配列Aがあるとします。最大合計を持つ連続したサブリストを見つけ、その合計を返す必要があります。したがって、配列AがA =[-2,1、-3,4、-1,2,1、-5,4]のようである場合、合計は6になります。サブ配列は[4、-1になります。 2、1]。 これを解決するために、動的計画法のアプローチを使用してみます。 Aのサイズと同じ配列dpを定義し、0で埋めます dp [0]:=A [0] for i:=1からAのサイズ– 1 dp [i]:=最大dp [i – 1] +A[i]およびA[i] dpで最大値を返す 理解を深めるために、次の実装を見てみま