Menu
CoddyTech

3Sum

ניתנת לך רשימה של מספרים שלמים nums. מצא כל שלשה [a, b, c] של ערכים שנלקחו משלושה מיקומים שונים ב-nums, כך ש-a + b + c = 0. כתוב כל שלשה בסדר לא יורד (a ≤ b ≤ c) והצג כל שלשה ייחודית פעם אחת, גם אם כמה בחירות של מיקומים יוצרות אותה. החזר את השלשות ממוינות לפי הערך הראשון שלהן, ואז לפי השני.

פונקציה

threeSum(nums: integer-array) → integer-2d-array
numsinteger-array
רשימת המספרים השלמים, עם לפחות שלושה איברים
מחזירהinteger-2d-array
כל שלשה ייחודית שסכומה 0, כאשר כל שלשה מסודרת בסדר לא־יורד והרשימה ממוינת

אילוצים

  • 3 ≤ nums.length ≤ 3000
  • -105 ≤ nums[i] ≤ 105
  • לפחות שלשה אחת מסתכמת ב־0.
  • שתי שלשות זהות כאשר הן מכילות את אותם שלושת הערכים.

דוגמאות

קלט
nums = [-2, 0, 1, 1, -1, 2]
פלט
[[-2, 0, 2], [-2, 1, 1], [-1, 0, 1]]
הסבר
-2 + 0 + 2, -2 + 1 + 1 וגם -1 + 0 + 1 שווים כולם ל-0. [-2, 1, 1] יכולה להשתמש בערך 1 פעמיים כי 1 מופיע בשני מקומות, ואילו אפשר לבנות את [-1, 0, 1] באמצעות אחד מהערכים 1, אבל הוא מופיע פעם אחת.

lock icon+15 בדיקות נסתרות בשליחה

challenge icon

שאלת המשך

אותה תבנית פותרת את 4Sum: מקבעים שני ערכים ומפעילים שני מצביעים על השאר. האם תוכל לכתוב זאת ב־O(n³) ולשמור על כללי הסרת הכפילויות בכל רמה?

איפוס הקוד
def threeSum(nums):
    # כתבו כאן קוד
מקרי בדיקה

מקרה 1

מקרה 2

קלט

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

צפוי

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