Diet Plan Performance [Easy] — Fixed Sliding Window

Sanjeev SharmaSanjeev Sharma
2 min read

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=3Output: 0
Input: calories=[3,2], k=2, lower=0, upper=1Output: 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

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro