✍️ در فهرست صعودی، جمع دو سر کمک میکند جهت درست حرکت را پیدا کنیم. اگر جمع کوچکتر از هدف باشد، کم کردن سر راست فقط آن را کوچکتر میکند؛ پس باید سر چپ را جلو ببریم. اگر جمع بزرگتر باشد، سر راست را عقب میبریم. این استدلال به مرتب بودن ورودی وابسته است و روی فهرست دلخواه معتبر نیست.
مثلاً برای [1, 3, 6, 10] و هدف نه، جمع دو سر یازده است؛ راست عقب میرود و جمع یک با شش هفت میشود. حالا چپ جلو میآید و سه با شش جواب میدهد. هر حرکت حداقل یک خانه را برای این جستوجو کنار میگذارد، پس مجموع حرکتها خطی است.
دو بخش ناقص کد را کامل کن. هدف این فعالیت فقط پاسخ True یا False است، نه شماره خانهها. خالی و تکعضوی هیچ زوجی ندارند، حتی اگر دو برابر عضو تنها برابر هدف باشد. خطای رایج، برعکس حرکت دادن اشارهگرها یا اجازه دادن به left == right است. مقدارهای برابر در دو خانه مجازند؛ شرط متفاوت بودن درباره شاخصهاست، همان چیزی که در تمرین قبلی دیدیم.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع sorted_has_pair(nums,target) فهرست صعودی غیرکاهشی اعداد صحیح میگیرد و وجود دو خانه متفاوت با جمع هدف را بولی برمیگرداند. خالی و تکعضوی False، دو مقدار برابر در دو خانه مجاز. sorted_has_pair([1,3,6,10],9)=True. ورودی تغییر نکند؛ با دو اشارهگر از دو سر حرکت کن. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.