Re: [閒聊] 每日leetcode

作者: enmeitiryous (enmeitiryous)   2024-09-05 08:44:17
模擬周
題目:2028 finds missing observation
給定一個6面分別為1-6的骰子,給你一個長度為m的vector為被觀察到的骰子擲m次的結果
給你一個數字n代表我們錯過的觀察次數(即實際總共擲了m+n次),及全部擲的結果的點數
總和平均,求未被觀察到的n次的任一可能結果,如果不可能則回傳{}
思路:
如果全部擲點數和-m次觀察到總和<n或是>6n則為不可能的情形,除此之外我們可以將
n長度vector填滿總和差/n,再一一把總和差%n 盡量讓ans[i]=6的條件下分配下去
vector<int> missingRolls(vector<int>& rolls, int mean, int n) {
int pre_ans=accumulate(rolls.begin(),rolls.end(),0);
int tol=rolls.size()+n;
int lim=tol*mean;
if((lim-pre_ans)>6*n || (lim-pre_ans)<n ){
return {};
}
else{
int cring=(lim-pre_ans)/n;
vector<int> ans(n,cring);
int cur=(lim-pre_ans)-(cring*n);
int cc=0;
while(cur!=0){
if(cur>=(6-cring)){
ans[cc]=6;
cur-=(6-cring);
cc++;
}
else{
ans[cc]+=cur;
cur=0;
}
}
return ans;
}
}

Links booklink

Contact Us: admin [ a t ] ucptt.com