یک تابع در جاوااسکریپت بنویس که یک آرایه عددی و یک عدد هدف بگیرد، آرایه را به صورت صعودی مرتب کند و با استفاده از جستجوی دودویی اندیس (index) عنصر هدف را در آرایه مرتب‌شده برگرداند و در صورت نبودن عنصر -1 خروجی دهد.

2.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:48

0.0

برای حل، ابتدا آرایه را به کمک Array.prototype.sort((a,b)=>a-b) به صورت عددی صعودی مرتب کنید (توجه کنید که sort بدون تابع عددها را به رشته تبدیل می‌کند). سپس یک جستجوی دودویی (iterative یا recursive) روی آرایه مرتب‌شده اجرا کنید: با دو اشاره‌گر low و high وسط را محاسبه کنید و با مقایسه مقدار وسط با هدف محدوده را کوچک نمایید تا عنصر پیدا شود یا بازه تمام شود؛ در صورت نیافتن -1 برگردانید. می‌توانید این کد را در مرورگر یا Node.js اجرا کنید؛ برای جلوگیری از تغییر آرایه ورودی آن را clone کنید و برای موارد تکراری یکی از اندیس‌های ممکن را بازگردانید؛ پیچیدگی زمانی کلی O(n log n) برای مرتب‌سازی و O(log n) برای جستجو خواهد بود.

توسط پژوهشگر در 202 روز قبل ساعت 02:48
دسته بندی ها: JavaScript JavaScript for beginner
nima در 202 روز قبل ساعت 08:26

نکته: برای جلوگیری از تغییر آرایه ورودی، آن را کپی کرده و سپس مرتب کنید. حتما از sort((a,b)=>a-b) استفاده کنید زیرا بدون comparator عددها را به رشته مرتب می‌کند. در جستجوی دودویی برای مقادیر تکراری می‌توانید هر یک از ایندکس‌های مناسب را برگردانید یا منطق ثابتی اعمال کنید. در نهایت اگر هدف پیدا نشد، -1 برگردانید و در غیر این صورت اندیس آن در آرایه مرتب‌شده را بدهید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری