Pythonの他のリストよりも小さい要素を持つ配列の最初の分割の最小長を見つけるプログラム
数値numsのリストがあるとすると、part1のすべての要素がpart1のすべての要素以下になるように、リストをpart1とpart2の2つの部分に分割します。可能な限り最小のpart1の長さを見つける必要があります(0の長さではありません)。
したがって、入力がnums =[3、1、2、5、4]の場合、part1 =[3、1、2]とpart2 =[5、のようにリストを分割できるため、出力は3になります。 4]。
これを解決するには、次の手順に従います-
- p:=最小数
- s:=0
- 範囲0からnums-1のサイズのiの場合、do
- nums [i]がpと同じ場合、
- s:=i
- ループから抜け出す
- nums [i]がpと同じ場合、
- p:=numsのサブリストの最大値[インデックス0からsまで]
- ans:=s
- 範囲s+1からnums-1のサイズのiの場合、do
- nums [i]
- ans:=i
- nums [i]
例
理解を深めるために、次の実装を見てみましょう-
def solve(nums): p = min(nums) s = 0 for i in range(len(nums)): if nums[i] == p: s = i break p = max(nums[: s + 1]) ans = s for i in range(s + 1, len(nums)): if nums[i] < p: ans = i return ans + 1 nums = [3, 1, 2, 5, 4] print(solve(nums))
入力
[3, 1, 2, 5, 4]
出力
3
-
Pythonでリストの隣接していない要素の最大の合計を見つけるプログラム
numsと呼ばれる数値のリストがあるとすると、隣接していない数値の最大の合計を返す関数を定義します。ここでは、数値は0または負の数にすることができます。 したがって、入力が[3、5、7、3、6]の場合、出力は16になります。これは、get16に3、7、および6を取ることができるためです。 これを解決するために、次の手順に従います- numsのサイズが<=2の場合、 最大数を返す noTake:=0 取る:=nums [0] 1からnumsのサイズの範囲のiの場合、実行します take:=noTake + nums [i] noTake:=
-
Pythonでリスト要素をイコライズするための最小総コストを見つけるプログラム
numsとcostsという2つの数値リストがあるとします。ここで、コストコスト[i]のnums[i]を増減できる操作があると考えてください。これらの操作はいくつでも実行でき、すべての要素をnumsで等しくしたいと考えています。必要な最小の総コストを見つける必要があります。 したがって、入力がnums =[3、2、4] cost =[1、10、2]のようである場合、1のコストで数値3を2に減らすことができるかのように、出力は5になります。それぞれ2のコストで、4を2回デクリメントできます。 これを解決するには、次の手順に従います- 関数helper()を定義します。これはターゲットにな