ভূমিকা
একটি অ্যারে এবং একটি টার্গেট নম্বর দেওয়া থাকলে, **সংলগ্ন (consecutive) দুটি এলিমেন্ট** যাদের যোগফল টার্গেটের সমান, সেটির প্রথম এলিমেন্টের ইন্ডেক্স রিটার্ন করতে হবে। না পেলে -1।
সম্পূর্ণ কোড
const arr = [4, 8, 2, 7, 6, 42, 41, 77, 32, 9];
const findPair = (arr, num) => {
for (let i = 0; i < arr.length; i++) {
if (arr[i] + arr[i+1] === num) {
return i;
}
}
return -1;
};
console.log(findPair(arr, 13)); // 3 (7+6=13, index 3)
console.log(findPair(arr, 48)); // 4 (6+42=48, index 4)
console.log(findPair(arr, 45)); // -1 (না পাওয়া)
কোড ব্যাখ্যা
- লুপ: `i = 0` থেকে `arr.length - 1` পর্যন্ত (বecause `i+1` অ্যাক্সেস)
- চেক: `arr[i] + arr[i+1] === num`
- রিটার্ন: প্রথম মিল পাওয়ায় ইন্ডেক্স `i`
- না পেলে: -1
আউটপুট
3
4
-1
বিকল্প পদ্ধতিগুলো
১. findIndex (ES6+ - সংক্ষিপ্ত)
const findPair = (arr, target) =>
arr.findIndex((val, i) => i < arr.length - 1 && val + arr[i+1] === target);
২. For...of with entries (আধুনিক)
const findPair = (arr, target) => {
for (const [i, val] of arr.entries()) {
if (i < arr.length - 1 && val + arr[i+1] === target) return i;
}
return -1;
};
৩. স্লাইডিং উইন্ডো আপসের (জেনারেলাইজড)
const findConsecutiveSum = (arr, target, k = 2) => {
for (let i = 0; i <= arr.length - k; i++) {
const sum = arr.slice(i, i + k).reduce((a, b) => a + b, 0);
if (sum === target) return i;
}
return -1;
};
ভেরিয়েশন: যেকোনো দুটি এলিমেন্ট (Non-consecutive)
যদি সংলগ্ন না হয়ে যেকোনো দুটি এলিমেন্ট খুঁজতে হয় (Two Sum Problem):
const twoSum = (arr, target) => {
const map = new Map();
for (let i = 0; i < arr.length; i++) {
const complement = target - arr[i];
if (map.has(complement)) return [map.get(complement), i];
map.set(arr[i], i);
}
return -1;
};
ব্যবহারিক অ্যাপ্লিকেশন
- ফিনান্সিয়াল: ট্রানজেকশন পেয়ার মিলান
- সিগন্যাল প্রসেসিং: প্যাটার্ন ডিটেকশন
- গেমিং: কনবো সিস্টেম, ম্যাচ-৩ লজিক
- স্ট্রিমিং অ্যালগরিদম: রিয়েল-টাইম প্যাটার্ন ম্যাচ
সারাংশ
সিম্পল ফর লুপ O(n) টাইমে সমাধান করে। Two Sum (non-consecutive) হলে Hash Map O(n) ব্যবহার করুন। সবসময় বাউন্ডারি চেক (`i < arr.length - 1`) রাখুন।