Menu
CoddyTech

Subarray Sum Equals K

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

פונקציה

subarraySum(nums: integer-array, k: integer) → integer
numsinteger-array
מערך של מספרים שלמים, שעשויים לכלול ערכים שליליים ואפסים
kinteger
הסכום שתת־מערך חייב להגיע אליו כדי להיחשב
מחזירהinteger
מספר תת־המערכים שסכום האיברים שלהם הוא k

אילוצים

  • 1 ≤ nums.length ≤ 2 × 104
  • -1000 ≤ nums[i] ≤ 1000
  • -107 ≤ k ≤ 107
  • במערך ארוך כל כך יש לכל היותר 200,010,000 תתי־מערכים, ולכן התשובה נכנסת למספר שלם חתום בן 32 סיביות.

דוגמאות

קלט
nums = [3, 4, -7, 1, 3, 3, 1, -4]k = 7
פלט
4
הסבר
ארבעה רצפים מסתכמים ל־7: [3, 4], [1, 3, 3], [3, 3, 1] ו־[3, 4, -7, 1, 3, 3]. ברצף האחרון ‎-7 מבטל את 3 ואת 4, והסכום עולה בחזרה ל־7 בהמשך, ולכן רצף יכול להתאים גם אחרי שהסכום שלו עבר את k.
challenge icon

שאלת המשך

איך היית משנה את הפתרון כדי להחזיר את האורך של תת-המערך הארוך ביותר שסכומו k, ועדיין בזמן O(n)?

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

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנטים

nums = [3, 4, -7, 1, 3, 3, 1, -4]
k = 7

הפלט הצפוי

4