要素を減らしてPythonで配列をジグザグにする
整数の配列numsがあるとすると、移動操作は実際に任意の要素を選択し、それを1ずつ減らします。1または2のいずれかが満たされる場合、配列Aはジグザグ配列です-
-
すべての偶数インデックスの要素は、隣接する要素よりも大きくなります。 A [0]> A [1] A [3] ...など。
-
すべての奇数インデックスの要素は、隣接する要素よりも大きいので、そうです。 A [0] A [2] A[4]<...など。
与えられた配列番号をジグザグ配列に変換するための最小移動数を見つける必要があります。
したがって、配列が[1,2,3]のような場合、出力は2になります。これは、2を0または3を1に減らすことができるためです
。これを解決するには、次の手順に従います-
-
solve()と呼ばれるメソッドを定義します。これはnumsを取り、開始します。これは以下のように機能します-
-
k:=0
-
範囲内のiの場合、開始からnumの長さまで、2ずつ増加します
-
left:=i – 1 <0の場合は100000、それ以外の場合はnums [i-1]
-
right:=i+1の場合は100000>=numsの長さ、それ以外の場合はnums [i + 1]
-
temp:=(左右の最小値)– 1 – nums [i]
-
temp <0の場合、k:=k + | temp |
-
-
kを返す
-
主な方法は
-
ans:=resolve(nums、0)
-
ans:=ansとsolve(nums、1)の最小値
-
ansを返す
理解を深めるために、次の実装を見てみましょう-
class Solution(object): def solve(self,nums,start): k = 0 for i in range(start,len(nums),2): left = 100000 if i-1<0 else nums[i-1] right = 10000 if i+1>=len(nums) else nums[i+1] temp= (min(left,right)-1 - nums[i]) if temp<0: k+=abs(temp) return k def movesToMakeZigzag(self, nums): ans = self.solve(nums,0) ans = min(ans,self.solve(nums,1)) return ans ob = Solution() print(ob.movesToMakeZigzag([1,2,3]))
入力
[1,2,3]
出力
2
-
Pythonで配列内の個別の要素をカウントする
Pythonのリストには、重複する要素が含まれている可能性があります。リストの長さを数えると、重複する要素を含む全長が得られます。ただし、この記事では、リスト内の個別の要素または一意の要素の総数を取得する方法を説明します。 例 以下の例では、collectionsモジュールのcounter()を使用しています。このモジュールでは、Counterはハッシュ可能なオブジェクトをカウントするためのdictサブクラスです。 Counterは、要素がディクショナリキーとして格納され、それらのカウントがディクショナリ値として格納される順序付けられていないコレクションです。したがって、元のリストから、キー
-
Bisect-Pythonの配列二分アルゴリズム
長いリストに挿入するたびにソート操作を実行すると、プロセッサが消費する時間の点でコストがかかる場合があります。 bisectモジュールは、挿入後にリストが自動的にソートされたままになることを保証します。この目的のために、それは二分アルゴリズムを使用します。モジュールには次の機能があります: bisect_left() このメソッドは、ソートされた順序を維持するために、リスト内の特定の要素の挿入ポイントを見つけます。リストにすでに存在する場合、挿入ポイントは既存のエントリの前(左側)になります。戻り値は、list.insert()の最初のパラメーターとして使用できます。 bisect_ri