#include <vector>
#include <algorithm>
int variableSlidingWindow(const std::vector<int>& arr) {
int left = 0;
int bestAns = 0;
int currentState = 0; // Could be an int, unordered_map, etc.
for (int right = 0; right < arr.size(); ++right) {
// 1. ACQUIRE: Add arr[right] to the current state
currentState += arr[right];
// 2. RELEASE (Shrink): While the window is INVALID, move left pointer
// Note: You will replace `conditionIsInvalid` with actual logic
while (/* conditionIsInvalid(currentState) */ false) {
// Remove arr[left] from current state
currentState -= arr[left];
left++; // Shrink the window
}
// 3. UPDATE: The window is now valid. Update the best answer.
// Example for finding the max length:
bestAns = std::max(bestAns, right - left + 1);
}
return bestAns;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCmludCB2YXJpYWJsZVNsaWRpbmdXaW5kb3coY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgYXJyKSB7CiAgICBpbnQgbGVmdCA9IDA7CiAgICBpbnQgYmVzdEFucyA9IDA7IAogICAgaW50IGN1cnJlbnRTdGF0ZSA9IDA7IC8vIENvdWxkIGJlIGFuIGludCwgdW5vcmRlcmVkX21hcCwgZXRjLgogICAgCiAgICBmb3IgKGludCByaWdodCA9IDA7IHJpZ2h0IDwgYXJyLnNpemUoKTsgKytyaWdodCkgewogICAgICAgIC8vIDEuIEFDUVVJUkU6IEFkZCBhcnJbcmlnaHRdIHRvIHRoZSBjdXJyZW50IHN0YXRlCiAgICAgICAgY3VycmVudFN0YXRlICs9IGFycltyaWdodF07CiAgICAgICAgCiAgICAgICAgLy8gMi4gUkVMRUFTRSAoU2hyaW5rKTogV2hpbGUgdGhlIHdpbmRvdyBpcyBJTlZBTElELCBtb3ZlIGxlZnQgcG9pbnRlcgogICAgICAgIC8vIE5vdGU6IFlvdSB3aWxsIHJlcGxhY2UgYGNvbmRpdGlvbklzSW52YWxpZGAgd2l0aCBhY3R1YWwgbG9naWMKICAgICAgICB3aGlsZSAoLyogY29uZGl0aW9uSXNJbnZhbGlkKGN1cnJlbnRTdGF0ZSkgKi8gZmFsc2UpIHsKICAgICAgICAgICAgLy8gUmVtb3ZlIGFycltsZWZ0XSBmcm9tIGN1cnJlbnQgc3RhdGUKICAgICAgICAgICAgY3VycmVudFN0YXRlIC09IGFycltsZWZ0XTsKICAgICAgICAgICAgbGVmdCsrOyAvLyBTaHJpbmsgdGhlIHdpbmRvdwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyAzLiBVUERBVEU6IFRoZSB3aW5kb3cgaXMgbm93IHZhbGlkLiBVcGRhdGUgdGhlIGJlc3QgYW5zd2VyLgogICAgICAgIC8vIEV4YW1wbGUgZm9yIGZpbmRpbmcgdGhlIG1heCBsZW5ndGg6CiAgICAgICAgYmVzdEFucyA9IHN0ZDo6bWF4KGJlc3RBbnMsIHJpZ2h0IC0gbGVmdCArIDEpOwogICAgfQogICAgCiAgICByZXR1cm4gYmVzdEFuczsKfQ==