Strange Counter
次のような不思議なカウンターの要素に高速にアクセスする方法
cntr = [1, 2, 3]
value = [3, 2, 1]
cntr = [4, 5, 6, 7, 8, 9]
value = [6, 5, 4, 3, 2, 1]
cntr = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
value = [12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
HackerRankの掲示板から。
各回のvalue
の初期値を、求めるカウンタt
から引いていけば、素早く目的の値に近づけるようだ。
t = 10のとき
1回目 10 - 3 = 7 -> まだ大きい
2回目 7 - 6 = 1 -> まだ大きい
3回目 12 > 1 なのでこのカウンタの中にある
配列の1番目の要素(Pythonの0番目)が求めるカウンタの値
コード
t = 10
m = 3
def StrangeCounter(t, m):
while t > m:
t -= m
m *= 2
return m-t+1
print StrangeCounter(t, m)
>> 12