কম্পিউটার টিউটোরিয়াল

JavaScript-এ অ্যারেতে টার্গেট সম দিয়ে কনসেকিউটিভ পেয়ার খুঁজে বের করা

ভূমিকা

একটি অ্যারে এবং একটি টার্গেট নম্বর দেওয়া থাকলে, **সংলগ্ন (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`) রাখুন।

  1. জাভাস্ক্রিপ্টে অ্যারেতে যেই জোড়ার যোগফল অ্যারেতেই আছে

  2. জাভাস্ক্রিপ্টে অ্যারেতে নির্দিষ্ট যোগফল দিয়ে তিনটি উপাদান বের করা

  3. জাভাস্ক্রিপ্টে অ্যারেতে সংখ্যাগুলোর যোগফল জোড় নাকি বিজোড় যাচ্চ করা

  4. জাভাস্ক্রিপ্টে জোড়া বানিয়ে সর্বোচ্চ সম্ভাব্য যোগফল