✍️ این بار میخواهیم جمع همه پنجرهها را به ترتیب شروعشان داشته باشیم. اول جمع k عضو را یک بار میسازیم؛ بعد برای هر عضو تازه، عضو قدیمی همان پنجره را کم میکنیم. اگر شاخص عضو ورودی i باشد، عضو خروجی در i-k است. این فاصله دقیقاً طول ثابت پنجره را حفظ میکند.
برای نمونه، [3, 1, -2, 6] با طول دو جمعهای [4,-1,4] دارد. از جمع چهار، سه را کم و منفی دو را اضافه میکنیم تا منفی یک شود. سپس یک خارج و شش وارد میشود تا به چهار برسیم. فقط جمع اولین پنجره به محاسبه کامل نیاز دارد.
تابع ناقص هم اعتبار طول را بررسی میکند و هم جمع اول را ساخته است؛ بهروزرسانی داخل حلقه و ثبت نتیجه را تکمیل کن. وقتی k برابر طول فهرست باشد، فقط یک جمع داریم. خطای رایج، کم کردن nums[i-k+1] یا اضافه کردن عدد تازه بدون حذف عدد قدیمی است؛ هر دو بعد از اولین پنجره جواب را خراب میکنند. ترتیب خروجی باید دقیقاً ترتیب حرکت از چپ به راست باشد، حتی اگر چند جمع برابر شوند.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع window_sums(nums,k) فهرست اعداد صحیح و k صحیح میگیرد و جمع تمام پنجرههای پیوسته با طول دقیق k را به ترتیب شروع برمیگرداند. اگر k<=0 یا k>len(nums)، از جمله هر k برای ورودی خالی، [] بده. ورودی تغییر نکند؛ window_sums([3,1,-2,6],2)=[4,-1,4]؛ k=len فقط یک جمع دارد. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.