题目来自http://topic.youkuaiyun.com/u/20101011/16/2befbfd9-f3e4-41c5-bb31-814e9615832e.html
给你10 分钟时间,根据上排给出十个数,在其下排填出对应的十个数
上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】
初看此题,貌似很难,10 分钟过去了,可能有的人,题目都还没看懂。
举一个例子,
数值: 0,1,2,3,4,5,6,7,8,9
分配: 6,2,1,0,0,0,1,0,0,0
0 在下排出现了6 次,1 在下排出现了2 次,
2 在下排出现了1 次,3 在下排出现了0 次....
以此类推..
思路:暴力递归尝试,每次对下排数组计数,并用计数结果更新数组本身,
如:下排数组为[9,0,0,0,0,0,0,0,0,1]时,对下排数组计数得count = [8,1,0,0,0,0,0,0,0,1]
于是将下排数组更新,需要注意的是,若下排数组b[i] = i,则需要再次加一更新。
def check(arr):
c = [0 for i in range(len(arr)+1)]
for i in arr:
c[i] += 1
flag = False
for i in range(len(arr)):
if arr[i] != c[i]:
arr[i] = c[i]
if arr[i] == i:
arr[i] += 1
flag = True
if flag:
return False
return True
def update(arr):
if check(arr):
return arr
update(arr)