1

問題文のアリスは彼女のクラスの子供たちにいくつかのキャンディーを与えたいHackerRankキャンディーズ分布

。すべての子供たちは一列に並んでいて(その位置は固定されています)、クラスのそれぞれのパフォーマンスに応じて、それぞれの評価点があります。アリスは各子供に少なくとも1つのキャンディーを与えたいと思っています。 2人の子供がお互いに隣に座っていると、評価の高い子供はもっとキャンディーを食べる必要があります。アリスはお金を節約したいので、子供たちに与えられるキャンディの総数を最小限に抑える必要があります。

アリスが購入しなければならないキャンディの最小数を含む1行を出力します。

HackerRank problem link

サンプル入力

3 (no of students) 
1 (individual scores) 
2 
2 

サンプル出力

4 

私の解決策

arr = [] 
for i in range(int(input())): 
    arr.append(int(input())) 

# candy left to right, candy right to left, and candy array 
candy_lr = [1]*(len(arr)) 
candy_rl = [1]*(len(arr)) 
candy = [] 

# traverses from left to right and assigns candy to students 
for i in range(1,len(arr)): 
    if arr[i]>arr[i-1]: 
     candy_lr[i] = candy_lr[i-1]+1 

# traverses from right to left and assigns candy to students   
for i in range(len(arr)-2,0,-1): 
    if arr[i]>arr[i+1]: 
     candy_rl[i] = candy_rl[i+1]+1 

#calculates the total candy needed 
for i in range(0,len(arr)): 
    candy.append(max(candy_lr[i],candy_rl[i])) 
print(sum(candy)) 

ただし、このソリューションでは、11/15のテストケースのみが渡されます。ここにはサンプルinputがあります。上記の入力の場合、出力は33556 ですが、私の出力は33555であり、4つのテストケースがすべて失敗した場合、私の出力は期待される出力と1で異なります。私は15要素とその正常な作業のためにペンと紙でそれを試しました。私は行方不明のコーナーケースはありますか?

答えて

1

コードにインデックスエラーがあります。範囲関数に最終索引は含まれません。

for i in range(len(arr)-2,0,-1): 

for i in range(len(arr)-2,-1,-1): 

例:あるべき:

3 
2 
1 
1 

あなたのコードの出力3の入力に対する正しい答えは4あるとき。