从Leetcode 每日一题练习继续讨论:
2028. 找出缺失的观测数据
2028. Find Missing Observations
题解
本题首先判断什么情况下不存在可行解, 用平均数计算数字和再减去已知的数字后的余数如果比6n大或比n小, 则无可行解, 6n表示未知的n个骰子都是6, n表示未知的n个骰子都是1. 若有可行解, 则先将这n个骰子均赋值为1, 随后使用贪心赋值, 直到将余数用完. 如3个骰子, 先赋值1,1,1. 若余数为7, 则再赋值6,1,1, 再赋值6,3,1. 每次都尽可能将一个骰子赋予最大值.
代码
func missingRolls(rolls []int, mean int, n int) []int {
rollsum := 0
for _,roll := range rolls{
rollsum += roll
}
sum := mean *(len(rolls)+n)
sum -= rollsum
if sum > 6*n || sum < n{
return []int{}
}
remain := make([]int, n)
for i:=0;i<n;i++{
remain[i] = 1
}
sum -= n
index := 0
for sum > 5{
remain[index] += 5
sum -= 5
index++
}
remain[index] += sum
return remain
}