Pythonで最後に使用された要素をその最後に移動するキューを設計するプログラム
最近使用した要素をその最後に移動するキューを設計するように求められたとします。キューは1からnまでの整数で初期化されます。次に、関数を作成して、呼び出されるたびに、入力として指定された位置からキューの最後に値を移動するようにする必要があります。関数を複数回呼び出し、関数は移動タスクの実行中に現在キューの最後にある値を返します。
したがって、キューが値n =5で初期化されている場合、または1から5までの値が含まれている場合。移動が実行される位置はそれぞれ5、2、3、および1であり、出力は5、2、4、1
になります。これを解決するには、次の手順に従います-
- i:=配列インデックス-1の位置。ここで、値kは、並べ替えられた順序を維持する右側に挿入できます。
- x:=data [i]から(k --index [i])番目の要素を削除します
- i + 1からインデックスのサイズまでの範囲のiiについては、
- index [ii]:=index [ii]-1
- データの最後の要素のサイズ>=nnの場合、
- リストデータの最後に新しいリストを挿入します
- リストインデックスの最後にnを挿入
- データの最後にxを挿入
- data [i]がrmptyの場合、
- データからi番目の要素を削除する
- インデックスからi番目の要素を削除する
- return x
例
理解を深めるために、次の実装を見てみましょう-
from bisect import bisect_right from math import sqrt class TestQueue: def __init__(self, n): self.n = n self.nn = int(sqrt(n)) self.data = [] self.index = [] for i in range(1, n+1): ii = (i-1)//self.nn if ii == len(self.data): self.data.append([]) self.index.append(i) self.data[-1].append(i) def solve(self, k): i = bisect_right(self.index, k)-1 x = self.data[i].pop(k - self.index[i]) for ii in range(i+1, len(self.index)): self.index[ii] -= 1 if len(self.data[-1]) >= self.nn: self.data.append([]) self.index.append(self.n) self.data[-1].append(x) if not self.data[i]: self.data.pop(i) self.index.pop(i) return x queue = TestQueue(5) print(queue.solve(5)) print(queue.solve(2)) print(queue.solve(3)) print(queue.solve(1))
入力
queue = TestQueue(5) print(queue.solve(5)) print(queue.solve(2)) print(queue.solve(3)) print(queue.solve(1))
出力
5 2 4 1
-
Pythonでプログラムを作成して、シリーズで最も頻繁に繰り返される要素を印刷します
入力 −シリーズがあると仮定します 0 1 1 2 2 3 3 2 4 3 5 3 6 3 7 4 8 4 9 2 出力 −そして、最も繰り返される要素の結果は3です。 解決策 これを解決するには、以下の手順に従います- シリーズを定義する ラムダ関数内にfunctoolsreduceメソッドを適用して、すべての要素の長さ
-
配列内の最大の要素を見つけるPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、配列の最大要素を計算する必要があります。 ここでは、ループ全体をトラバースして最大の要素を計算し、要素を取得するブルートフォースアプローチを使用します。 以下の実装を観察できます。 例 # largest function def largest(arr,n): #maximum element max = arr[0] # traverse the whole loop for