Menu
CoddyTech

4Sum

ניתנת לך רשימה של מספרים שלמים nums ומספר שלם target. החזר כל רביעייה [a, b, c, d] שארבעת הערכים שלה נמצאים בארבעה מיקומים שונים ב־nums וסכומם הוא target. כתוב כל רביעייה כשהערכים שלה מסודרים בסדר לא יורד. אם אפשר לבחור את אותם ארבעת הערכים ממיקומים שונים, הרביעייה עדיין תופיע פעם אחת בלבד. מיין את התשובה לפי הערך הראשון, אחר כך לפי השני, ואז לפי השלישי. אם אין רביעייה מתאימה, החזר רשימה ריקה.

פונקציה

fourSum(nums: integer-array, target: integer) → integer-2d-array
numsinteger-array
המספרים לבחירה, לפחות אחד
targetinteger
הסכום שאליו כל רביעייה חייבת להגיע
מחזירהinteger-2d-array
הרביעיות הייחודיות שסכומן הוא היעד, כל אחת ממוינת, וגם הרשימה ממוינת; רשימה ריקה אם אין כאלה

אילוצים

  • 1 ≤ nums.length ≤ 200
  • -108 ≤ nums[i] ≤ 108
  • -109 ≤ target ≤ 109
  • הסכום של כל ארבעה ערכים נמצא בטווח שבין -4 × 108 ל־4 × 108, ולכן הוא מתאים למספר שלם בן 32 סיביות.
  • רביעיות שמכילות את אותם ארבעה ערכים נחשבות לאחת.

דוגמאות

קלט
nums = [3, -1, 0, 2, -2, 1, -3]target = 1
פלט
[[-3, -1, 2, 3], [-3, 0, 1, 3], [-2, -1, 1, 3], [-2, 0, 1, 2]]
הסבר
כל אחת מארבע הרביעיות מסתכמת ב־1, לדוגמה -3 + (-1) + 2 + 3. שתי הרביעיות שמתחילות ב־-3 מופיעות ראשונות, בסדר עולה לפי הערך השני שלהן: -1 לפני 0.
challenge icon

שאלת המשך

ספור את הקבוצות של ארבעה מיקומים שהערכים בהם מסתכמים ל־target, ולא את הרביעיות הייחודיות. בדוגמה השנייה יש 15. האם תוכל לעשות זאת ב־O(n²)?

איפוס הקוד
def fourSum(nums, target):
    # כתבו כאן את הקוד

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנטים

nums = [3, -1, 0, 2, -2, 1, -3]
target = 1

הפלט הצפוי

[[-3, -1, 2, 3], [-3, 0, 1, 3], [-2, -1, 1, 3], [-2, 0, 1, 2]]