# your code goes here
class Solution(object):
def maxSubarrayLessOrEqualToK(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
i = 0 # Left pointer of the window
s = 0 # Running sum of the current window
max_len = 0 # Tracks the maximum length found
for j in range(len(nums)):
s += nums[j]
while s > k and i <= j:
s -= nums[i]
i += 1
if s <= k:
max_len = max(max_len, j - i + 1)
return max_len
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmNsYXNzIFNvbHV0aW9uKG9iamVjdCk6CiAgICBkZWYgbWF4U3ViYXJyYXlMZXNzT3JFcXVhbFRvSyhzZWxmLCBudW1zLCBrKToKICAgICAgICAiIiIKICAgICAgICA6dHlwZSBudW1zOiBMaXN0W2ludF0KICAgICAgICA6dHlwZSBrOiBpbnQKICAgICAgICA6cnR5cGU6IGludAogICAgICAgICIiIgogICAgICAgIGkgPSAwICAgICAgICAgICMgTGVmdCBwb2ludGVyIG9mIHRoZSB3aW5kb3cKICAgICAgICBzID0gMCAgICAgICAgICAjIFJ1bm5pbmcgc3VtIG9mIHRoZSBjdXJyZW50IHdpbmRvdwogICAgICAgIG1heF9sZW4gPSAwICAgICMgVHJhY2tzIHRoZSBtYXhpbXVtIGxlbmd0aCBmb3VuZAogICAgICAgIAogICAgICAgIGZvciBqIGluIHJhbmdlKGxlbihudW1zKSk6CiAgICAgICAgICAgIHMgKz0gbnVtc1tqXQogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgcyA+IGsgYW5kIGkgPD0gajoKICAgICAgICAgICAgICAgIHMgLT0gbnVtc1tpXQogICAgICAgICAgICAgICAgaSArPSAxCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiBzIDw9IGs6CiAgICAgICAgICAgICAgICBtYXhfbGVuID0gbWF4KG1heF9sZW4sIGogLSBpICsgMSkKICAgICAgICAKICAgICAgICByZXR1cm4gbWF4X2xlbgo=