PythonでKLengthサブリストを削除した後に最小振幅を見つけるプログラム
numsと呼ばれる数値のリストと値kがあるとします。最初にサイズkのサブリストを削除し、次に最小値(numsの最大値-numsの最小値)を見つけます。
したがって、入力がnums =[2、3、10、9、8、4] k =3のような場合、出力は2になります。[10、9、8]を削除すると、[2、3、 4]および4-2=2
これを解決するには、次の手順に従います-
-
N:=numsのサイズ
-
numsをlminとlmaxにコピーします
-
また、numsをrminとrmaxにコピーします
-
1からN-1の範囲のiの場合、実行
-
lmin [i]:=最小のlmin[i]とlmin[i-1]
-
lmax [i]:=lmax[i]とlmax[i-1]の最大値
-
-
N-2から0の範囲のiの場合、1ずつ減らします。
-
rmin [i]:=最小のrmin[i]およびrmin[i + 1]
-
rmax [i]:=rmax[i]とrmax[i+ 1]
の最大値
-
-
ans:=最小値(rmax [k]-rmin [k])、(lmax[kの補数]-lmin[kの補数])
-
0からN-k-2の範囲のiの場合、実行
-
cand:=(lmax[i]およびrmax[i + k + 1]の最大値)-(lmin[i]およびrmin[i + k + 1]の最小値)
-
ans:=最小のansとcand
-
-
ansを返す
例
理解を深めるために、次の実装を見てみましょう
def solve(nums, k): N = len(nums) lmin, lmax = nums[:], nums[:] rmin, rmax = nums[:], nums[:] for i in range(1, N): lmin[i] = min(lmin[i], lmin[i - 1]) lmax[i] = max(lmax[i], lmax[i - 1]) for i in range(N - 2, -1, -1): rmin[i] = min(rmin[i], rmin[i + 1]) rmax[i] = max(rmax[i], rmax[i + 1]) ans = min(rmax[k] - rmin[k], lmax[~k] - lmin[~k]) for i in range(N - k - 1): cand = max(lmax[i], rmax[i + k + 1]) - min(lmin[i], rmin[i + k + 1]) ans = min(ans, cand) return ans nums = [2, 3, 10, 9, 8, 4] k = 3 print(solve(nums, k))
入力
[2, 3, 10, 9, 8, 4], 3
出力
2
-
Pythonでマージした後も、最小数の色を見つけるプログラムが残っています
色のリスト(R、G、B)があるとします。これで、2つの異なる色が隣り合っている場合、それらは3番目の色の単一の色のアイテムに変換できます。そのような変換の可能なシーケンスの後に残っているそれらの最小数を見つける必要があります。 したがって、入力がcolors =[G、 R、 G、 B、 R]の場合、以下のように変換できるため、出力は1になります- これを解決するには、次の手順に従います- n:=色のサイズ 色に異なる色が1つしかない場合は、 return n n <=1の場合、 return n x:=0 d:=キーと値のペアを持つマップ{( R、1)、(
-
PythonでKをインクリメントした後、同等の最長のサブリストを見つけるプログラム
numsとkという数のリストがあるとします。ここで、任意の1つの要素を1回インクリメントできる操作について考えてみます。最大でk回の操作を実行できる場合は、等しい要素を含む最長のサブリストを見つける必要があります。 したがって、入力がnums =[3、5、9、6、10、7] k =6のような場合、サブリスト[10、10を取得するために9を1回、6を4回インクリメントできるため、出力は3になります。 、10]。 これを解決するには、次の手順に従います- numsが空の場合、 0を返す wMax:=numsと同じサイズの両端キュー。ペアを挿入します(nums [0]、0)