हमारे पास नंबरों के दो एरे हैं, और हमें एक फ़ंक्शन लिखना आवश्यक है, मान लीजिए intersection() जो उनके इंटरसेक्शन की गणना करता है और एक एरे लौटाता है जिसमें किसी भी क्रम में इंटरसेक्टिंग तत्व होते हैं। परिणाम में प्रत्येक तत्व उतनी बार प्रकट होना चाहिए जितनी बार वह दोनों एरे में दिखाई देता है।
उदाहरण के लिए - यदि,
Input: arr1 = [1,2,3,1], arr2 = [1,3,1] Output: [1,3,1]
दृष्टिकोण
यदि एरे सॉर्टेड होते, तो हम टू-पॉइंटर दृष्टिकोण का उपयोग कर सकते थे जिसमें शुरू में दोनों संबंधित एरे के 0 की शुरुआत की ओर इशारा करते हैं और हम संबंधित पॉइंटर को बढ़ाकर आगे बढ़ सकते थे और यह समय के संबंध में O(m+n) जटिल होता जहां m और n एरे के आकार हैं।
लेकिन चूंकि हमारे पास अनसॉर्टेड एरे हैं, एरे को सॉर्ट करने और फिर इस दृष्टिकोण का उपयोग करने में कोई तर्क नहीं है, हम पहले एरे के हर मान को दूसरे के खिलाफ जांचेंगे और एक इंटरसेक्शन एरे बनाएंगे। इससे हमें O(n^2) समय लगेगा।
और इसे करने के लिए कोड होगा -
उदाहरण
const arr1 = [1, 2, 43, 5, 3, 7, 7,8, 4, 2]; const arr2 = [1, 1, 6, 6, 2, 78, 7, 2, 3, 7, 23, 5, 3]; const intersection = (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(intersection(arr1 ,arr2));आउटपुट
कंसोल में आउटपुट होगा -
[1, 2, 5, 3, 7, 7, 2]