یک تابع در جاوااسکریپت بنویسید که یک آرایه از اعداد و یک عدد هدف بگیرد، آرایه را به صورت صعودی مرتب کند و با استفاده از جستجوی دودویی اندیس عدد هدف را در آرایه مرتبشده برگرداند (اگر پیدا نشد -1 بازگردانید).
9.0 بازدید آخرین ویرایش در 199 روز قبل ساعت 23:38 0.0
برای حل، ابتدا آرایه را بدون تغییر دادن ورودی با arr.slice() کپی کنید و با استفاده از arr.sort((a, b) => a - b) به صورت عددی مرتب کنید؛ سپس یک جستجوی دودویی (while با low و high و محاسبه mid) پیادهسازی کنید تا اندیس عنصر هدف را در آرایه مرتبشده پیدا کنید. نکات مفید: برای مرتبسازی اعداد از تابع مقایسه استفاده کنید تا ترتیب درست حفظ شود، پیچیدگی زمانی کلی O(n log n) برای مرتبسازی و O(log n) برای جستجو است، و اگر عنصر تکراری نیاز به بازگرداندن اولین ظاهر داشت باید پس از پیدا شدن، به سمت چپ ادامه دهید یا مکانیابی اضافی انجام دهید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
قبل از مرتبسازی آرایه را با arr.slice() کپی کنید تا ورودی تغییر نکند، و از arr.sort((a, b) => a - b) برای مرتبسازی عددی استفاده کنید. سپس با جستجوی دودویی (متغیرهای low و high و محاسبه mid) اندیس هدف را در آرایه مرتبشده پیدا کنید تا زمان جستجو O(log n) شود و کل الگوریتم O(n log n) باقی بماند. اگر به اولین وقوع عنصر تکراری نیاز دارید، پس از یافتن مقدار باید به سمت چپ ادامه دهید یا مکانیابی اضافی انجام دهید.
گزارش