สมมติว่าเรามีอาร์เรย์ที่เรียกว่า nums และค่าเป้าหมาย k เราต้องหาความยาวสูงสุดของอาร์เรย์ย่อยที่รวมเป็น k หากไม่มีอยู่ ให้คืนค่า 0 แทน
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[1, -1, 5, -2, 3], k =3 ผลลัพธ์จะเป็น 4 เช่นเดียวกับ subarray [1, - 1, 5, -2] รวมเป็น 3 และยาวที่สุด
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ยกเลิก :=0
-
กำหนดหนึ่งแผนที่ m
-
n :=ขนาดของ nums
-
อุณหภูมิ :=0, m[0] :=-1
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
temp :=temp + nums[i]
-
ถ้า (temp - k) อยู่ในหน่วย m แล้ว −
-
ret :=สูงสุดของ ret และ i - m[temp - k]
-
-
ถ้าอุณหภูมิไม่เป็น m แล้ว −
-
m[temp] :=i
-
-
-
รีเทิร์น
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class Solution { public: int maxSubArrayLen(vector<int<& nums, int k) { int ret = 0; unordered_map <int, int> m; int n = nums.size(); int temp = 0; m[0] = -1; for(int i = 0; i < n; i++){ temp += nums[i]; if(m.count(temp - k)){ ret = max(ret, i - m[temp - k]); } if(!m.count(temp)){ m[temp] = i; } } return ret; } }; main(){ Solution ob; vector<int< v = {1,-1,5,-2,3}; cout << (ob.maxSubArrayLen(v, 3)); }
อินพุต
[1,-1,5,-2,3], 3
ผลลัพธ์
4