本文已参与「新人创作礼」活动,一起开启掘金创作之路。
| 每日一题做题记录,参考官方和三叶的题解 |
题目要求
思路
可以算出丢失的个值之和,然后构造一个加起来恰好得的数组res即可【】。
- ,所以,否则无解返回空数组;
- 有解的时候,一定可以构造出一个包含个和个的结果。那么将
res填充为,然后计算需要补的数量,也就是与的差值,将这些加在res的个数上。
Java
class Solution {
public int[] missingRolls(int[] rolls, int mean, int n) {
int m = rolls.length, cnt = m + n;
int sum = mean * cnt;
for(int i : rolls)
sum -= i;
if(sum < n || sum > 6 * n)
return new int[0];
int[] res = new int[n];
//构造结果
Arrays.fill(res, sum / n);
//保证整除
if(sum / n * n < sum) {
int dis = sum - (sum / n * n), idx = 0;
while(dis-- > 0)
res[idx++]++;
}
return res;
}
}
- 时间复杂度:
- 空间复杂度:
C++
class Solution {
public:
vector<int> missingRolls(vector<int>& rolls, int mean, int n) {
int m = rolls.size(), cnt = m + n;
int sum = mean * cnt;
for(int i : rolls)
sum -= i;
if(sum < n || sum > 6 * n)
return {};
//构造结果
vector<int> res(n, sum / n);
//保证整除
if(sum / n * n < sum) {
int dis = sum - (sum / n * n), idx = 0;
while(dis-- > 0)
res[idx++]++;
}
return res;
}
};
- 时间复杂度:
- 空间复杂度:
vector
- 学习参考链接
- 前两天刚学习整理过,今天主要是学习一下如何快速插入多个相同的元素。
- 如何添加个,参考
- 初始化时直接添加:
std::vector<int> res(cnt, val);- 用
insert函数
res.insert(res.end(), cnt, val);//在末尾添加
总结
题目思路不难,主要是想好如何构造能整除的答案。
| 欢迎指正与讨论! |