מציאת המספר החיובי הקטן ביותר שלא יכול להיות סכום של חלק מהמערך

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

יש להחזיר את המספר הקטן ביותר שלא יכול להיות סכום של קבוצת מספרים מהמערך.

לדוגמה,

  • עבור המערך הבא:
012345
126101115

1 יכול להיות כי הוא הסכום של התא arr[0]. 2 יכול להיות כי הוא הסכום של התא arr[1]. 3 יכול להיות כי הוא הסכום של התאים arr[0] ו- arr[1]. 4 לא יכול להיות סכום של חלק מאיברי המערך (לאו דווקא רצופים). לכן יוחזר 4.

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

אילוצים:

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

דוגמה 1:
קלט:
arr = [1, 2, 6, 10, 11, 15]
פלט:
4

הסבר: המספרים 1, 2, 3 ניתנים לייצור כסכום של חלק מאלמנטי המערך, אך המספר 4 לא ניתן לייצור

דוגמה 2:
קלט:
arr = [1, 1, 1, 1]
פלט:
5

הסבר: ניתן ליצור את המספרים 1, 2, 3, 4 אך לא את המספר 5

דוגמה 3:
קלט:
arr = [1, 1, 3, 4]
פלט:
10

הסבר: ניתן ליצור את המספרים 1-9 אך לא את המספר 10

דוגמה 4:
קלט:
arr = [1, 3, 5, 10, 20, 40]
פלט:
2

הסבר: המספר 1 ניתן ליצור אך המספר 2 לא ניתן לייצור

דוגמה 5:
קלט:
arr = [1, 2, 4, 10, 11, 15]
פלט:
8

הסבר: ניתן ליצור את המספרים 1-7 אך לא את המספר 8

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

הסבר: ניתן ליצור את כל המספרים מ-1 עד 21

דוגמה 7:
קלט:
arr = [2, 3, 4, 6, 12]
פלט:
1

הסבר: המספר 1 לא ניתן ליצור כי אין במערך האלמנט 1

דוגמה 8:
קלט:
arr = [1, 1, 2, 3, 5, 8, 13]
פלט:
34

הסבר: זו סדרת פיבונאצ'י וניתן ליצור את כל המספרים עד 33

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

קלט:

arr = [1, 2, 6, 10, 11, 15]

הפלט המבוקש:

4