题目
题解
class Solution {
public int numberOfArrays(int[] differences, int lower, int upper) {
int[] hidden=new int[differences.length+1];
int count=0;
for(int j=lower;j<=upper;j++){
boolean bool=true;
hidden[0]=j;
for(int i=0;i<differences.length;i++){
hidden[i+1]=hidden[i]+differences[i];
if(hidden[i+1]<lower||hidden[i+1]>upper){
bool=false;
}
}
if(bool){
count++;
}
}
return count;
}
}
emm,会超时这一个!
class Solution {
public int numberOfArrays(int[] differences, int lower, int upper) {
//根据差分数组求出原数组的最大值和最小值,然后原数组的最大最小之差在上下界有多少可行位置即为答案
int a=0,d=upper-lower,min=0,max=0;
for(int i=0;i<differences.length;i++){
a+=differences[i];
min=Math.min(min,a);
max=Math.max(a,max);
if(max-min>d){return 0;}//避免使用long,出现范围超出的直接返回0
}
return d-max+min+1;
}
}
//设初始值为0,计算最小值与最大值,并平移到有效区间,计算满足最大值和区间右端的有效值的个数