Menu
CoddyTech

Longest Subarray with Sum K

整数numsと目標値kが与えられたとき、要素の合計がちょうどkになる最長の部分配列の長さを返してください。部分配列とは、連続する要素を少なくとも1つ含む範囲です。値には0以下のものが含まれる場合があります。合計がkになる部分配列がない場合は、0を返してください。

関数

longestSubarrayWithSumK(nums: integer-array, k: integer) → integer
numsinteger-array
検索する整数(負の数とゼロを含む)
kinteger
部分配列が持つべき正確な合計値
戻り値integer
合計がkになる最長の部分配列の長さ。該当するものがない場合は0

制約

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • -109 ≤ k ≤ 109
  • すべての累積和は-2 × 108から2 × 108の範囲内に収まるため、32ビット整数で十分です。
  • 合計が k になる部分配列がない場合は 0 を返します。

例

入力
nums = [2, -1, 3, 1, -4, 2, 3]k = 5
出力
5
説明
3つの連続区間の合計はいずれも5です。末尾の[2, 3]、先頭の[2, -1, 3, 1]、そしてインデックス2から6までの[3, 1, -4, 2, 3]です。最後のものが最も長く、要素数は5です。
challenge icon

発展問題

負の値も引き続き許容される場合、合計が最大でもkとなる最長の部分配列をどのように見つけますか?

コードをリセット
def longestSubarrayWithSumK(nums, k):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

nums = [2, -1, 3, 1, -4, 2, 3]
k = 5

期待される出力

5