✍️ در ورودی مرتب، تمام تکرارهای هر مقدار کنار هم هستند. لازم نیست برای هر عضو همه خروجی قبلی را بگردیم؛ کافی است عضو فعلی را با آخرین مقدار ثبتشده مقایسه کنیم. اگر متفاوت بود یک مقدار تازه داریم. اینجا دو نقش داریم: یک شاخص خواندن روی ورودی و یک شاخص نوشتن روی یک فضای کاری جدا.
مثلاً از [2, 2, 5, 5, 5, 8] به [2, 5, 8] میرسیم. اولین دو ثبت میشود، دو بعدی رد میشود و با دیدن پنج، محل نوشتن یک خانه جلو میرود. ترتیب صعودی حفظ میشود و فقط یک نسخه از هر مقدار باقی میماند.
چون قرارداد اجازه تغییر ورودی را نمیدهد، یک کپی برای فضای کاری بساز یا خروجی تازهای را بهتدریج پر کن. خالی باید خروجی خالی بدهد و فهرست کاملاً تکراری یک عضو خواهد داشت. خطای رایج، مقایسه با خانه قبلیِ خروجی پیش از ثبت اولین عضو یا برگرداندن تمام فضای کاری شامل خانههای استفادهنشده است. لازم نیست set بسازی؛ هدف دیدن این است که مرتب بودن چگونه مقایسه با یک همسایه را کافی میکند.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند، حفظ ورودی و تازه بودن فهرست خروجی را بررسی میکند؛ خروجی حتی برای خالی و تکعضوی نباید همان فهرست ورودی باشد. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع unique_sorted(nums) فهرست صعودی غیرکاهشی اعداد صحیح را میگیرد و یک فهرست تازه صعودی با فقط یک نسخه از هر مقدار برمیگرداند. ورودی تغییر نکند. خالی []، همهبرابر یک عضو و تکعضوی همان مقدار در فهرست تازه است؛ unique_sorted([2,2,5,8,8])=[2,5,8]. با پیمایش و محل نوشتن حل کن. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند، حفظ ورودی و تازه بودن فهرست خروجی را بررسی میکند؛ خروجی حتی برای خالی و تکعضوی نباید همان فهرست ورودی باشد. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.