סעיף א
כתבו אלגוריתם המקבל זוג מערכים בגדלים m, n ומחזיר מערך המכיל את כל האיברים המשותפים לשני המערכים. ניתן להניח כי אף אחד מהמערכים אינו מכיל את אותו מפתח יותר מפעם אחת (כלומר בכל מערך בפני עצמו אין כפולים אך ייתכנו ערכים המשותפים לשני המערכים).
זמן הריצה המבוקש הוא: \(\Theta(\max(m, n) \cdot \log(\min(m, n)))\).

סעיף ב
נגדיר מבנה של רשימה דו-ראשית כמורכב משתי רשימות (חד-מקושרות) המתחברות לרשימה אחת. שני מקטעי הראש אינם בהכרח שווים בגודלם.
כתבו אלגוריתם המקבל כקלט מצביעים לרשימה דו-ראשית (למשל, שני מצביעים לאיברים הראשונים של שתי הרשימות), ובונה רשימה חד מקושרת רגילה, המכילה איברים עם אותם מפתחות כמו ברשימה הדו-ראשית ובאותו מספר מופעים. אין לשנות את הרשימה הדו-ראשית (או להוסיף לה שדות). אין חשיבות לסדר האיברים ברשימה הרגילה שהאלגוריתם בונה. זמן הריצה המבוקש הוא לינארי באורך הרשימה המתקבלת.

סעיף א': חישבו כיצד מיון המערך הקטן יותר יכול לעזור לכם לעמוד במגבלת הזמן.
סעיף ב': כדי למנוע ספירה כפולה של החלק המשותף, השתמשו במבנה נתונים עזר כדי לזכור את הצמתים שכבר ביקרתם בהם.