Re: [閒聊] 每日leetcode

作者: argorok (s.green)   2024-09-05 08:47:29
※ 引述《enmeitiryous (enmeitiryous)》之銘言:
: 模擬周
: 題目:2028 finds missing observation
: 給定一個6面分別為1-6的骰子,給你一個長度為m的vector為被觀察到的骰子擲m次的結果
: 給你一個數字n代表我們錯過的觀察次數(即實際總共擲了m+n次),及全部擲的結果的點數
: 總和平均,求未被觀察到的n次的任一可能結果,如果不可能則回傳{}
: 思路:
: 如果全部擲點數和-m次觀察到總和<n或是>6n則為不可能的情形,除此之外我們可以將
: n長度vector填滿總和差/n,再一一把總和差%n 盡量讓ans[i]=6的條件下分配下去
思路差不多 先求n個骰子總和 在[n, 6n]範圍才合法
接下來把骰子平均點數 多出來的餘數另外加就可以了
class Solution {
public:
vector<int> missingRolls(vector<int>& rolls, int mean, int n) {
vector<int> ans(n, 0);
int m = rolls.size(), total = n+m;
int m_rolls = accumulate(rolls.begin(), rolls.end(), 0);
int n_rolls = mean * total - m_rolls;
if(n_rolls < n || n_rolls > n*6 ) return {};
int avg_point = n_rolls / n, reminder = n_rolls % n;
for(int i = 0; i < n; ++i){
ans[i] = avg_point;
if(i < reminder) ans[i]++;
}
return ans;
}
};

Links booklink

Contact Us: admin [ a t ] ucptt.com