در JavaScript تابعی بنویس که آرایهای از اعداد را بهصورت صعودی مرتب کند و سپس با استفاده از جستجوی دودویی عدد هدف را پیدا کرده و اندیس آن یا -1 را برگرداند.
3.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:46 0.0
برای حل این مسئله میتوانید ابتدا با استفاده از Array.prototype.sort و تابع مقایسهای (a - b) آرایه را بهصورت عددی صعودی مرتب کنید (توجه کنید که sort بهصورت پیشفرض رشتهای مرتب میکند). سپس یک جستجوی دودویی (iterative یا recursive) روی آرایه مرتبشده پیادهسازی کنید: با دو نشانگر low و high وسط را محاسبه کرده، مقدار وسط را با هدف مقایسه کنید و نشانگرها را مطابق نتیجه جابجا کنید تا عنصر پیدا شود یا بازگرداندن -1. نکات مفید: برای جلوگیری از تغییر آرایه ورودی از آرایه یک کپی بگیرید (مثل [...arr] یا arr.slice())، محاسبه اندیس وسط را با Math.floor انجام دهید، و بدانید که در صورت وجود مقادیر تکراری جستجوی دودویی ممکن است هر یک از اندیسهای مطابق را برگرداند مگر اینکه بهصورت خاص اولی/آخرین را بخواهید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای جلوگیری از تغییر ورودی، یک کپی از آرایه بسازید مثل [...arr] یا arr.slice(). سپس با آرایه کپی شده بهصورت عددی مرتب کنید (a - b) تا مرتبسازی بهصورت صعودی باشد. حالا جستجوی دودویی روی آرایه مرتبشده را پیادهسازی کنید با Math.floor برای محاسبه میانه و استفاده از low و high تا یا اندیس هدف به دست آید یا -1 بازگردد. در مقادیر تکراری ممکن است هر اندیس مطابق یافت شود، مگر اینکه بخواهید اولین یا آخرین را دقیقاً برگردانید که نیازمند پیادهسازی یک جستجوی تکمیلی است. همچنین بهصرفه بودن زمان اجرا را در نظر بگیرید: O(n log n) برای مرتبسازی و O(log n) برای جستجو و بهکارگیری گزینههای ابتدایی/نهایی متناسب با نیاز شما.
گزارش