Menu
CoddyTech

Subarray Sum Equals K

整数の配列 nums と整数 k が与えられます。要素の合計がちょうど k になる部分配列の数を数えてください。部分配列とは、隣り合う1つ以上の要素が連続したものです。値が同じでも、開始位置または終了位置が異なる場合は、別々の部分配列として数えます。値は負またはゼロの場合もあります。

関数

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
説明
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