العثور على العنصر الأقصى الذي هو شائع في المصفوفات المختلفة؟

في وقت سابق من اليوم سألت مشكلة مماثلة للعثور على العنصر الأقصى الذي هو شائع في صفيفتين. حصلت على اثنين من الحلول الجيدة هنا ( ابحث عن الحد الأقصى العنصر الشائع في صفيفين؟ ).

الآن حدث لي ، ما إذا كان بدلا من مصفوفة اثنين لدينا للعثور على العنصر الأقصى الذي هو شائع في المصفوفات المختلفة؟

مثال:

 array1 = [1,5,2,4,6,88,34]
 array2 = [1,5,6,2,34]
 array3 = [1,34]
 array4 = [7,99,34]

Here the maximum element which is common in all the arrays is 34.

هل هو فكرة جيدة لإنشاء hashmap من array1 ، array2 ..... مصفوفة (N-1) على حدة ومن ثم تحقق من كل عنصر من arrayN في كل من هذه hashmaps تتبع العنصر الأقصى (عندما تكون موجودة في جميع hashmaps )؟

هل يمكننا الحصول على حلول أفضل من ذلك؟

0

2 إجابة

hashmap ليست جيدة لتتبع الحد الأقصى من العناصر. ما تريده هو كومة كحد أقصى أو علامة تجزئة.

قمت بإنشاء n max كومة وقمت باجتياز n منها. تأخذ عنصر الحد الأقصى المشترك. قد يكون هذا صعب التنفيذ.

نهج آخر سيكون العثور على تقاطع جميع مجموعات واتخاذ الحد الأقصى من التقاطع. في هذه الحالة ، يمكنك استخدام hashset.

0
وأضاف
لماذا هو downvote؟ هل هذا خطأ؟
وأضاف المؤلف DarthVader, مصدر
أنا متأكد من إنشاء مجموعات من المصفوفات ، ثم إيجاد الحد الأقصى للتقاطع هو الحل الأكثر أناقة. حل كومة يبدو عالي الكعب ...
وأضاف المؤلف WLPhoenix, مصدر
For each array A_n:
  Add all elements in A_n to a hashset, H_n

Create a hashmap, M, which maps values to counts.
For each hashset H_n:
  For each value, v, in H_n:
    M[v]++

Go through M for the highest value with count == N

سيتم تشغيل هذا في O (n) من الزمان والمكان ، حيث n هو إجمالي عدد العناصر في كل المصفوفات. كما أنه يتعامل بشكل صحيح مع العناصر التي يتم تكرارها في مجموعة واحدة ، والتي لم تذكرها والتي قد تسبب مشاكل لبعض الخوارزميات. إذا كنت تعلم أنه لن يكون لديك عناصر مكررة في مصفوفة واحدة ، يمكنك تخطي الخطوة الأولى وإضافة قيم إلى M مباشرة من المصفوفات.

0
وأضاف
أي شخص يريد أن يفسر لماذا حصلت على تخفيض في هذا؟ من المؤكد إلى حد ما أنك لا تستطيع التغلب على زمن O (n) ، وأن الفضاء O (n) لا يبدو بهذا السوء.
وأضاف المؤلف Running Wild, مصدر