সমস্যা বিবরণ
একটি অ্যারে "স্পেশাল" যদি একটি পজেটিভ ইন্টিজার num থাকে যাতে অ্যারেতে num এর চেয়ে বড় num টি এলিমেন্ট থাকে। num অ্যারেতে থাকতে হয় না।
ইনপুট: [2, 1, 5, 2, 7, 9]
num = 3 হলে: ৩টির চেয়ে বড় এলিমেন্ট আছে ৫, ৭, ৯ (৩টি) → স্পেশাল, রিটার্ন ৩।
সমাধান
const arr = [2, 1, 5, 2, 7, 9];
const findSpecialArray = (array = []) => {
const arr = array.slice().sort((a, b) => a - b);
let index = 1;
const { length } = arr;
while (index <= arr[length - 1]) {
let num = 0;
for (let i = 0; i < length; i++) {
if (arr[i] >= index) num++;
}
if (num === index) return index;
index++;
}
return -1;
};
console.log(findSpecialArray(arr)); // 3
আউটপুট
3
অপ্টিমাইজড পদ্ধতি
সর্টেড অ্যারেতে বাইনারি সার্চ বা সিম্পল লজিক: arr[n - num] > num && arr[n - num - 1] <= num চেক করে O(n log n) বা O(n) তে করা যায়।