n个士兵在准备阅兵仪式, 每个士兵的升高用a[0], a[1], ..., a[n-1]表示。现在要选出一部分士兵
组成k行参加正式阅兵, 要求 1.每一行的士兵数相同 2.每一行中, 任意两个士兵的身高差不能大于2。
请问最多可以选出多少士兵同事参战。
import copy
def largest_k_order_num(nums, k):
_min, _max = int(min(nums)), int(max(nums))
arr = [0] * (_max - _min + 1)
# 计数
for num in nums:
idx = int(num) - _min
arr[idx] += 1
# 合并结果
for i in range(len(nums) / k, 0, -1):
row = 0 # 排数统计
_arr = copy.copy(arr)
for j in range(0, len(arr) - 3):
total = sum(_arr[j:j+3]) # 统计滑动窗口
_k = total / i
row += _k
d = _k * i
for x in range(3):
if _arr[j+x] - d < 0:
d -= _arr[j+x]
_arr[j+x] = 0
else:
_arr[j+x] -= d
break
if row == k:
return i * k
del _arr[:]
return k
士兵排列
最新推荐文章于 2022-10-27 09:50:30 发布