请你实现三个 API append,addAll 和 multAll 来实现奇妙序列。 请实现 Fancy 类 : Fancy() 初始化一个空序列对象。 void append(val) 将整数 val 添加在序列末尾。 void addAll(inc) 将所有序列中的现有数值都增加 inc 。 void multAll(m) 将序列中的所有现有数值都乘以整数 m 。 int getIndex(idx) 得到下标为 idx 处的数值(下标从 0 开始),并将结果对 109 + 7 取余。如果下标大于等于序列的长度,请返回 -1 。 示例: 输入: ["Fancy", "append", "addAll", "append", "multAll", "getIndex", "addAll", "append", "multAll", "getIndex", "getIndex", "getIndex"] [[], [2], [3], [7], [2], [0], [3], [10], [2], [0], [1], [2]] 输出: [null, null, null, null, null, 10, null, null, null, 26, 34, 20] 解释: Fancy fancy = new Fancy(); fancy.append(2); // 奇妙序列:[2] fancy.addAll(3); // 奇妙序列:[2+3] -> [5] fancy.append(7); // 奇妙序列:[5, 7] fancy.multAll(2); // 奇妙序列:[5*2, 7*2] -> [10, 14] fancy.getIndex(0); // 返回 10 fancy.addAll(3); // 奇妙序列:[10+3, 14+3] -> [13, 17] fancy.append(10); // 奇妙序列:[13, 17, 10] fancy.multAll(2); // 奇妙序列:[13*2, 17*2, 10*2] -> [26, 34, 20] fancy.getIndex(0); // 返回 26 fancy.getIndex(1); // 返回 34 fancy.getIndex(2); // 返回 20 解答一下
时间: 2023-06-04 18:03:40 浏览: 168
这是一道算法题,要求实现一个 Fancy 类,其中包含三个 API,用于添加、修改和获取序列中的数值。具体的操作包括:在序列末尾添加一个数值、对序列中所有数值进行加法操作、对序列中所有数值进行乘法操作、获取序列中指定下标位置的数值。
首先考虑实现 append 方法,在该方法中,将输入的参数 val 添加到序列的末尾即可。
其次,考虑实现 addAll 方法,遍历序列中的所有数值,将它们分别加上输入的参数 inc。
最后,考虑实现 multAll 方法,遍历序列中的所有数值,将它们分别乘以输入的参数 m。
在实现 getIndex 方法时,需要注意处理下标值过大的情况。如果指定下标处的数值存在,则返回该数值对 10^9 + 7 取余的结果。如果下标值过大,则返回 -1。
以下是完整的代码实现:
```
class Fancy {
public:
vector<long long> a, b;
int n = 0;
const int MOD = 1e9 + 7;
void append(int val) {
a.push_back(val);
b.push_back(0);
n++;
}
void addAll(int inc) {
b.back() += inc;
}
void multAll(int m) {
b.back() *= m;
for (int i = 0; i < n; i++) {
b[i] *= m;
a[i] = (a[i] * m) % MOD;
}
}
int getIndex(int idx) {
if (idx >= n) return -1;
long long x = a[idx];
for (int i = 0; i < n; i++) {
x = (x + b[i]) % MOD;
}
return x;
}
};
```
阅读全文