Diet Plan Performance [Easy] — Fixed Sliding Window
Advertisement
Problem Statement
A dieter has a calorie log. For every k consecutive days, if sum > upper, score +1; if sum < lower, score -1; else score 0. Return total score.
Input: calories=[1,2,3,4,5], k=1, lower=3, upper=3 → Output: 0
Input: calories=[3,2], k=2, lower=0, upper=1 → Output: 1
Intuition
Fixed sliding window of size k. Maintain a running sum, slide right by adding calories[i] and subtracting calories[i-k].
Solutions
C++
int dietPlanPerformance(vector<int>& cal, int k, int lower, int upper) {
int s=0, score=0;
for(int i=0;i<k;i++) s+=cal[i];
if(s>upper) score++; else if(s<lower) score--;
for(int i=k;i<cal.size();i++){
s+=cal[i]-cal[i-k];
if(s>upper) score++; else if(s<lower) score--;
}
return score;
}
Python
def dietPlanPerformance(calories: list[int], k: int, lower: int, upper: int) -> int:
s = sum(calories[:k])
score = (1 if s > upper else -1 if s < lower else 0)
for i in range(k, len(calories)):
s += calories[i] - calories[i-k]
score += 1 if s > upper else -1 if s < lower else 0
return score
JavaScript
var dietPlanPerformance = function(calories, k, lower, upper) {
let s=calories.slice(0,k).reduce((a,b)=>a+b,0), score=0;
const check=()=>{if(s>upper)score++;else if(s<lower)score--;};
check();
for(let i=k;i<calories.length;i++){s+=calories[i]-calories[i-k];check();}
return score;
};
Complexity
- Time: O(n)
- Space: O(1)
Advertisement