התת-מערך עם הסכום המינימלי

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

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

0123456789
10425638159
  • אם המספר k = 3 אז תת-המערך בגודל 3 שסכומו הוא הקטן ביותר הוא זה שמתחיל באינדקס 1 ומסתיים באינדקס 3. הסכום 4 + 2 + 5 הוא הקטן ביותר. ויודפס Minimum sum sub-array is (1,3).
  • אם המספר k = 2 אז יש שני תת-מערכים בגודל 2 שסכומם הוא הקטן ביותר (6). גם זה שמתחיל באינדקס 1 ומסתיים באינדקס 2, וגם זה שמתחיל באינדקס 7 ומסתיים באינדקס 8. לכן יודפס באופן שרירותי, Minimum sum sub-array is (1,2) או Minimum sum sub-array is (7,8).

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

אילוצים:

k אינו גדול מגודל המערך.

דוגמה 1:
קלט:
arr = [10, 4, 2, 5, 6, 3, 8, 1, 5, 9],
k = 3
פלט:
Minimum sum sub-array is (1,3)

הסבר: תת-המערך שמתחיל באינדקס 1 ומסתיים באינדקס 3 הוא בעל הסכום המינימלי.

דוגמה 2:
קלט:
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3],
k = 4
פלט:
Minimum sum sub-array is (0,3)

הסבר: תת-המערך שמתחיל באינדקס 0 ומסתיים באינדקס 3 הוא בעל הסכום המינימלי.

דוגמה 3:
קלט:
arr = [7, 2, 8, 1, 2, 8, 1, 8, 2, 8],
k = 3
פלט:
Minimum sum sub-array is (1,3)

הסבר: תת-המערך שמתחיל באינדקס 1 ומסתיים באינדקס 3 הוא בעל הסכום המינימלי.

דוגמה 4:
קלט:
arr = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
k = 5
פלט:
Minimum sum sub-array is (0,4)

הסבר: כל תת-מערך בגודל 5 הוא בעל סכום זהה.

דוגמה 5:
קלט:
arr = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
k = 2
פלט:
Minimum sum sub-array is (0,1)

הסבר: תת-המערך שמתחיל באינדקס 0 ומסתיים באינדקס 1 הוא בעל הסכום המינימלי.

דוגמה 6:
קלט:
arr = [5, 4, 3, 2, 1, 0, -1, -2, -3, -4],
k = 3
פלט:
Minimum sum sub-array is (7,9)

הסבר: תת-המערך שמתחיל באינדקס 7 ומסתיים באינדקס 9 הוא בעל הסכום המינימלי.

דוגמה 7:
קלט:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
k = 5
פלט:
Minimum sum sub-array is (0,4)

הסבר: תת-המערך שמתחיל באינדקס 0 ומסתיים באינדקס 4 הוא בעל הסכום המינימלי.

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

קלט:

arr = [10, 4, 2, 5, 6, 3, 8, 1, 5, 9],
k = 3

הפלט המבוקש:

Minimum sum sub-array is (1,3)