✍️ در این بخش بازهها بستهاند: هر دو خانه چپ و راست داخل جمع قرار میگیرند. اگر بازه [left,right] باشد، تا right باید right+1 عضو برداریم؛ بعد سهم left عضو قبل از شروع را حذف میکنیم. بنابراین فرمول prefix[right+1]-prefix[left] است. علامت بهعلاوه یک از تعریف جدول میآید، نه از حفظ یک دستور عجیب.
مثلاً با [2, 5, 1]، جدول [0,2,7,8] است و جمع خانههای یک تا دو برابر 8-2=6 میشود. حالا این کد را دنبال کن:
nums = [4, -2, 7, 1]
prefix = [0, 4, 2, 9, 10]
left, right = 1, 2
answer = prefix[right + 1] - prefix[left]
print(answer)
ابتدا خود اعضای بازه را مشخص کن تا یک راه بررسی مستقل داشته باشی. بعد دو خانه جدول را بخوان و تفریق را انجام بده. خطای رایج، استفاده از prefix[right] است که عضو راست را جا میاندازد. خطای دیگر، کم کردن prefix[left-1] است؛ با این تعریف، خود prefix[left] دقیقاً سهم قبل از بازه را دارد و یک واحد عقب رفتن لازم نیست.
فعالیت شما
خروجی کد را برای جمع بسته خانههای 1 تا 2 از [4,-2,7,1] انتخاب کن؛ فرمول prefix[right+1]-prefix[left] است.