题目 2028. 找出缺失的观测数据
解题思路
乍一看题目很长看起来很复杂的亚子,其实就是纸老虎,简单的模拟题。大致题意为:已知数组的总和sum、大小n和数字范围[1-6],求数组的某一种组合。思路如下:
1. 求该数组的平均值mean_n,若平均值超过数字范围,则返回空数组;
2. 数组中每个数初始为mean_n,此时还剩下sum%n的值未分配;
3. 剩下的值挨个分配,不足6的值直接加到6,直到剩余值分配完为止。
c++代码如下:
class Solution {//没啥技巧 类似贪心 优先都分6
public:
vector<int> missingRolls(vector<int>& rolls, int mean, int n) {
int m=rolls.size();
int sum_m=0;
for(int i=0;i<m;i++) sum_m+=rolls[i];
int sum_n=(n+m)*mean-sum_m;
int mean_n=sum_n/n;
vector<int> ans;
int resdisual=sum_n%n;
if(mean_n>6||(mean_n==6&&resdisual>0)||sum_n<n) return ans;
ans=vector(n,mean_n);
for(int i=0;i<n&&resdisual>0;i++)
{
if(resdisual>(6-ans[i])){
resdisual-=(6-ans[i]);
ans[i]=6;
}
else{
ans[i]+=resdisual;
resdisual=0;
}
}
return ans;
}
};