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

জাভাস্ক্রিপ্টে দুটি সিকোয়েন্স স্ট্রিক্টলি ইনক্রিজিং করা


স্ট্রিক্টলি ইনক্রিজিং সিকোয়েন্স

একটি সিকোয়েন্স স্ট্রিক্টলি ইনক্রিজিং হলে যদি এবং কেবল যদি arr[0] < arr[1] < arr[2] < ... < arr[arr.length - 1]।

সমস্যা

আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা দুটি সংখ্যার অ্যারে arr1 এবং arr2 প্রথম ও দ্বিতীয় আর্গুমেন্ট হিসেবে নেবে।

আমরা arr1-থেকে arr2-এ যেকোনো সংখ্যক উপাদান সোয়াপ করতে পারি, যেগুলো একই সূচকে থাকে। অর্থাৎ আমরা arr1[i] কে arr2[i] দিয়ে সোয়াপ করতে পারি। ফাংশনটি উভয় সিকোয়েন্সকে স্ট্রিক্টলি ইনক্রিজিং বানানোর জন্য ন্যূনতম সোয়াপের সংখ্যা ফেরত দেবে।

উদাহরণস্বরূপ, যদি ইনপুট হয় –

ইনপুট

const arr1 = [1, 3, 5, 4]; 
const arr2 = [1, 2, 3, 7];

আউটপুট

const output = 1;

আউটপুট ব্যাখ্যা

কারণ যদি arr1[3] কে arr2[3] দিয়ে সোয়াপ করি, তবে দুটি অ্যারেই স্ট্রিক্টলি ইনক্রিজিং হবে।

উদাহরণ

নিচে কোডটি দেওয়া হল –

const arr1 = [1, 3, 5, 4]; 
const arr2 = [1, 2, 3, 7]; 
const findSwaps = (arr1 = [], arr2 = []) => { 
  let map = { 
    true: 1, 
    false: 0, 
  }; 
  for (let i = 1; i < arr1.length; i++) { 
    const current = { 
      true: Infinity, 
      false: Infinity, 
    }; 
    if (arr1[i] > arr2[i - 1] && arr2[i] > arr1[i - 1]) { 
      current.true = Math.min(current.true, map.false + 1); 
      current.false = Math.min(current.false, map.true); 
    } 
    if (arr2[i] > arr2[i - 1] && arr1[i] > arr1[i - 1]) { 
      current.true = Math.min(current.true, map.true + 1); 
      current.false = Math.min(current.false, map.false); 
    } 
    map = current; 
  } 
  return Math.min(map.false, map.true); 
}; 
console.log(findSwaps(arr1, arr2));

আউটপুট

1

  1. জাভাস্ক্রিপ্টে দুটি অবজেক্ট মার্জ করা

  2. জাভাস্ক্রিপ্টে দুটি অবজেক্টের ইউনিয়ন

  3. জাভাস্ক্রিপ্টে দুটি অ্যারেতে isSubset চেক করা

  4. জাভাস্ক্রিপ্টে সবচেয়ে দীর্ঘ ইনক্রিজিং সাবসিকোয়েন্সের মোট সংখ্যা গণনা