Pythonで値の範囲の条件を持つ最長のサブリストの長さを見つけるプログラム
numsと呼ばれる数値のリストがあるとすると、最長のサブリストの長さを見つける必要があります。ここで、2 *(サブリストの最小値)>(サブリストの最大値)。
したがって、入力がnums =[10、2、6、6、4、4]のような場合、サブリスト[6、6、4、4]は指定されたものを満たす最長のサブリストであるため、出力は4になります。基準(2 * 4)> 6.
これを解決するには、次の手順に従います-
- ret:=0
- minq:=空の両端キュー
- maxq:=空の両端キュー
- l:=0
- r:=0
- r
- n:=nums [r]
- minqが空ではなく、n
- minqから最後の要素を削除する
- maxqから最後の要素を削除する
- minqの左のアイテム
- maxqの最後のアイテムを削除する
例
理解を深めるために、次の実装を見てみましょう-
from collections import deque def solve(nums): ret = 0 minq, maxq = deque(), deque() l, r = 0, 0 while r < len(nums): n = nums[r] while minq and n < nums[minq[-1]]: minq.pop() minq.append(r) while maxq and n > nums[maxq[-1]]: maxq.pop() maxq.append(r) r += 1 while l < r and nums[minq[0]] * 2 <= nums[maxq[0]]: if minq[0] == l: minq.popleft() if maxq[0] == l: maxq.popleft() l += 1 ret = max(ret, r - l) return ret nums = [10, 2, 6, 6, 4, 4] print(solve(nums))
入力
[10, 2, 6, 6, 4, 4]
出力
4
-
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で最長の連続シーケンスの長さを見つけるプログラム
並べ替えられていない数値の配列があるとすると、連続する要素の最長シーケンスの長さを見つける必要があります。 したがって、入力がnums =[70、7、50、4、6、5]の場合、連続する要素の最長シーケンスは[4、5、6、7]であるため、出力は4になります。したがって、その長さを返します:4。 これを解決するには、次の手順に従います- nums:=numsのすべての一意の要素 max_cnt:=0 numsのnumごとに、実行します num-1がnumsにない場合、 cnt:=0 numがnumsに存在する間、実行します num:=num + 1