حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش الگوریتم و حل مسئله با پایتون؛ تمرین عملی

بیشترین جمع پنجره ثابت در پایتون؛ ورودی تماماً منفی

پنجره لغزان در پایتون؛ جمع بازه ثابت و مقدارهای منفی · 0٪

✍️ برای پیدا کردن بیشترین جمع، لازم نیست همه جمع‌ها را در یک فهرست ذخیره کنیم. جمع پنجره فعلی و بهترین جمع تا اینجا کافی‌اند. بعد از هر حرکت، اول جمع فعلی را اصلاح کن، سپس آن را با بهترین مقدار مقایسه کن. این روش علاوه بر پیمایش خطی، حافظه کمکی ثابتی برای محاسبه نگه می‌دارد.

مثلاً در [-5, -1, -4] با طول دو، جمع پنجره‌ها منفی شش و منفی پنج است؛ جواب منفی پنج است. اگر بهترین را از صفر آغاز کنی، هیچ‌کدام بزرگ‌تر نمی‌شوند و جواب صفر می‌دهی، در حالی که هیچ پنجره‌ای با جمع صفر نداریم. بهترین اولیه باید جمع اولین پنجره معتبر باشد.

تابع را از صفر بنویس و کنترل طول نامعتبر را پیش از هر محاسبه انجام بده. اینجا خروجی فقط عدد بیشینه است، پس تساوی چند پنجره نیاز به انتخاب شاخص ندارد. برای k یک، عملاً بزرگ‌ترین عضو را می‌یابیم؛ برای k برابر طول، فقط جمع کل وجود دارد. خطای رایج، انتخاب چند عدد بزرگِ غیرپیوسته یا نادیده گرفتن اعضای منفی است. طول پنجره باید در همه مسیرها دقیقاً k بماند.

تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

فعالیت شما

تابع max_window_sum(nums,k) فهرست اعداد صحیح و k صحیح می‌گیرد و بیشترین جمع میان پنجره‌های پیوسته دقیقاً k عضوی را عددی برمی‌گرداند. اگر k<=0 یا k>len(nums)، شامل خالی، None بده. منفی‌ها معتبرند؛ max_window_sum([-5,-1,-4],2)=-5. k=1 و k=len را پوشش بده؛ ورودی تغییر نکند و جمع را با ورود/خروج به‌روز کن. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

def max_window_sum(nums, k):
    # TODO: validate k, initialize from the first real window, then slide
    pass

# این تابع آماده فقط برای ارزیابی است؛ آن را تغییر نده.
def course_check(*args):
    from copy import deepcopy
    before = deepcopy(args)
    result = max_window_sum(*args)
    if args != before:
        raise ValueError('ورودی نباید تغییر کند.')
    return result