מציאת שני איברים סמוכים עם סכום יעד במערך ממוין לסירוגין

מערך נקרא "ממוין לסירוגין" אם שני תת-מערכים שלו המורכבים אחד ממספרים המופיעים באינדקסים הזוגיים (..., 2, 0) והשני ממספרים באינדקסים האי-זוגיים (..., 3, 1) הם ממוינים כל אחד.

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

לדוגמא, המערך הבא הוא ממוין לסירוגין

0123456
12536109

בעוד שהמערך הבא אינו ממוין לסירוגין (כי 4 מופיע אחרי 5 בתת-מערך הזוגיים):

0123456
12534109

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

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

0123456
12536109

כאשר x=9 יוחזר true (שני האיברים הסמוכים 3 ו-6 סכומם 9) ועבור אותו מערך a כאשר x=5 יוחזר false (אין שני איברים סמוכים שסכומם 5).

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

אילוצים:

יש להתייחס גם למקרה בו במערך יש רק איבר אחד, ואז יוחזר false.

אפשר להניח שהמערך מלא בנתונים ושהוא ממוין לסירוגין.

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

הסבר: איברים סמוכים 6 ו-3 (באינדקסים 4 ו-3) נותנים סכום 9

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

הסבר: אין איברים סמוכים שסכומם 5

דוגמה 3:
קלט:
a = [5],
x = 10
פלט:
false

הסבר: מערך עם איבר אחד - אין איברים סמוכים

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

הסבר: איברים 1 ו-2 סמוכים וסכומם 3

דוגמה 5:
קלט:
a = [10, 5, 20, 15, 30],
x = 15
פלט:
true

הסבר: איברים 10 ו-5 נותנים סכום 15

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

הסבר: איברים 2 ו-4 נותנים סכום 6

דוגמה 7:
קלט:
a = [-1, -2, -3, -4],
x = -3
פלט:
true

הסבר: איברים -1 ו--2 נותנים סכום -3

דוגמה 8:
קלט:
a = [0, 0, 0, 0, 0],
x = 0
פלט:
true

הסבר: כל זוג איברים סמוכים נותן סכום 0

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

קלט:

a = [1, 2, 5, 3, 6, 10, 9],
x = 9

הפלט המבוקש:

true