מציאת זוג מספרים עם סכום נתון במערך ממוין שעבר הזזה

נגדיר: הזזה של s צעדים של מערך a היא העתקה של כל איבר באינדקס i לאינדקס s+i. ההזזה היא מעגלית. כלומר, אם המערך הוא בגודל n, וההזזה היא בגודל s, אז האיבר באינדקס n-s עובר לאינדקס 0 וכך הלאה. שימו לב שאף איבר לא "נעלם" בהזזה. הוא פשוט עבר למקום אחר ולא "נדרס".

בהינתן מערך כזה a ומספר sum יש להחזיר true אם קיימים שני מספרים שונים במערך שסכומם הוא sum, ואחרת false.

לדוגמה, המערך a הוא:

0123456
6570-53484952

אם הפרמטר sum = 44, יוחזר true כיוון ש--5 + 49 = 44

אם הפרמטר sum = 45, יוחזר false כיוון שאין שני מספרים במערך שסכומם 45.

השיטה צריכה להיות יעילה ככל הניתן, גם מבחינת סיבוכיות הזמן וגם מבחינת סיבוכיות המקום.

אילוצים:

המערך מלא במספרים שלמים ממוינים בסדר עולה שעבר הזזה כלשהי (אולי בגודל 0)

דוגמה 1:
קלט:
a = [65, 70, -5, 3, 48, 49, 52],
sum = 44
פלט:
true

הסבר: המספרים -5 ו-49 נותנים סכום של 44

דוגמה 2:
קלט:
a = [65, 70, -5, 3, 48, 49, 52],
sum = 45
פלט:
false

הסבר: אין שני מספרים במערך שסכומם 45

דוגמה 3:
קלט:
a = [3, 4, 5, 1, 2],
sum = 9
פלט:
true

הסבר: המספרים 4 ו-5 נותנים סכום של 9

דוגמה 4:
קלט:
a = [1, 2, 3, 4, 5],
sum = 10
פלט:
false

הסבר: הסכום המקסימלי האפשרי הוא 4+5=9, לכן 10 אינו אפשרי

דוגמה 5:
קלט:
a = [-10, -5, 0, 5, 10],
sum = 0
פלט:
true

הסבר: המספרים -10 ו-10 נותנים סכום של 0

דוגמה 6:
קלט:
a = [7, 11, 15, 2],
sum = 9
פלט:
true

הסבר: המספרים 2 ו-7 נותנים סכום של 9

דוגמה 7:
קלט:
a = [7, 9, 1, 3, 5],
sum = 8
פלט:
true

הסבר: המספרים 1 ו-7 נותנים סכום של 8

דוגמה 8:
קלט:
a = [1, 2],
sum = 4
פלט:
false

הסבר: הסכום המקסימלי האפשרי הוא 1+2=3, לכן 4 אינו אפשרי

Loading...
נשמרLn 1, Col 1

קלט:

a = [65, 70, -5, 3, 48, 49, 52],
sum = 44

הפלט המבוקש:

true