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.

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

challenge icon

שאלת המשך

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

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

מקרה 1

מקרה 2

מקרה 3

קלט

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

צפוי

4