初期値が0のカウンターがN個ある。(N次元配列) カウンターには、次のオペレーションが存在する。 increase(X):カウンターXを1インクリメントする。 max counter:全てのカウンターを、現在のカウンターの最大値に設定する。 これらのオペレーションを表す、M個の整数を含む配列Aがあるとする。 A[K] = X(ただし 1 <= X <= N)の場合、オペレーションKは increase(X) を表す。 A[K] = N+1の場合、オペレーションKは max counter を表す。 全てのオペレーションを実行した後のカウンターを求めよ。 ただし、 NとMの範囲は[1..100,000]とする。 配列Aはの要素は[1..N + 1]の範囲の整数とする。
例
入力 A = [3, 4, 4, 6, 1, 4, 4], N=5 出力-> [3, 2, 2, 4, 2] 各オペレーション後のカウンターの状態: [0, 0, 1, 0, 0] [0, 0, 1, 1, 0] [0, 0, 1, 2, 0] [2, 2, 2, 2, 2] [3, 2, 2, 2, 2] [3, 2, 2, 3, 2] [3, 2, 2, 4, 2]
これで、
Python
1def solution(N, A): 2 k=[0]*N 3 for i in A: 4 if i<=N: 5 k[i-1]+=1 6 else: 7 k=[max(k)]*N 8 return k
としたとき、O(N*M)となって数が大きいときに通りません。
どうすればいいのでしょう。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/08 03:33