আমাদের সংখ্যার দুটি অ্যারে আছে, এবং আমাদের একটি ফাংশন লিখতে হবে, ধরা যাক intersection() যেটি তাদের ছেদকে গণনা করে এবং একটি অ্যারে প্রদান করে যা যেকোনো ক্রমে ছেদকারী উপাদানগুলিকে ধারণ করে। ফলাফলের প্রতিটি উপাদান উভয় অ্যারেতে যতবার দেখায় ততবার উপস্থিত হওয়া উচিত।
যেমন −
যদি ইনপুট হয় −
arr1 = ['hello', 'world', 'how', 'are', 'you']; arr2 = ['hey', 'world', 'can', 'you', 'rotate'];
তারপর আউটপুট −
হওয়া উচিতOutput: ['world', 'you'];
পন্থা
অ্যারেগুলি সাজানো থাকলে, আমরা প্রাথমিকভাবে সংশ্লিষ্ট অ্যারের শুরুতে 0 নির্দেশ করে দুটি পয়েন্টার পদ্ধতি ব্যবহার করতে পারতাম এবং আমরা সংশ্লিষ্ট পয়েন্টার বাড়ানোর সাথে এগিয়ে যেতে পারতাম এবং এটি O(m+n) জটিল w.r.t. সময় যেখানে m এবং n অ্যারের মাপ।
কিন্তু যেহেতু আমাদের কাছে বিন্যাসহীন অ্যারে রয়েছে তাই অ্যারেগুলিকে সাজানোর এবং তারপরে এই পদ্ধতিটি ব্যবহার করার কোন যুক্তি নেই, আমরা দ্বিতীয়টির বিপরীতে প্রথমটির প্রতিটি মান পরীক্ষা করব এবং একটি ইন্টারসেকশন অ্যারে তৈরি করব। এতে আমাদের O(n^2) সময় ব্যয় হবে।
উদাহরণ
নিম্নলিখিত কোড -
arr1 = ['hello', 'world', 'how', 'are', 'you']; arr2 = ['hey', 'world', 'can', 'you', 'rotate']; const intersectElements = (arr1, arr2) => { const res = []; const { length: len1 } = arr1; const { length: len2 } = arr2; const smaller = (len1 < len2 ? arr1 : arr2).slice(); const bigger = (len1 >= len2 ? arr1 : arr2).slice(); for(let i = 0; i < smaller.length; i++) { if(bigger.indexOf(smaller[i]) !== -1) { res.push(smaller[i]); bigger.splice(bigger.indexOf(smaller[i]), 1, undefined); } }; return res; }; console.log(intersectElements(arr1, arr2));
আউটপুট
এটি কনসোলে −
নিম্নলিখিত আউটপুট তৈরি করবে[ 'world', 'you' ]