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