LC2145.统计隐藏数组数目
思路:前缀和 + 计算距离
- 利用前缀和计算出第一项不确定的数组
hiden
- 不全面的想法:
hiden
数组中,第0项为x
,数字的范围集中在[x + minn]
和[x + maxn]
当中 - 这个想法是我一开始的想法,但是实际上是不对的。因为
minn
和maxn
的符号难以确定。 允许的上下界范围是
upper - lower
可以将其视作一段距离,而hiden
数组中允许的范围也可以视作一个距离。相减即可。代码:
class Solution {
public:
int numberOfArrays(vector<int>& differences, int lower, int upper) {
int begin_num = 0;
int n = differences.size();
vector<long long> nums(n + 1, 0);
for (int i = 1; i <= n; ++i) {
nums[i] = nums[i - 1] + differences[i - 1];
}
long long min_num = INT_MAX, max_num = INT_MIN;
for (int i = 1; i <= n; ++i) {
max_num = max(max_num, nums[i]);
min_num = min(min_num, nums[i]);
}
long long dis = max(max_num - min_num, max(abs(max_num - 0), abs(min_num - 0)));
return (upper - lower) - dis + 1 > 0 ? (upper - lower) - dis + 1 : 0;
}
};