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;}};
