給定一個二進制數組, 找到含有相同數量的 0 和 1 的最長連續子數組(的長度)。
示例 1:
輸入: [0,1] 輸出: 2 說明: [0, 1] 是具有相同數量0和1的最長連續子數組。
示例 2:
輸入: [0,1,0] 輸出: 2 說明: [0, 1] (或 [1, 0]) 是具有相同數量0和1的最長連續子數組。
class Solution {
public:
int findMaxLength(vector<int>& nums) {
unordered_map <int, int> hash;
//在這裏的話我們通過將 0 轉換爲 -1 ;這樣子的話,這道題目就變成了 數據串中 最長的 和爲0 的序列
int s =0;
int result =0;
hash[0] = -1; //在這裏的話,我們進行一下初始化,原因是如果 最開始是以 0 開始的一串數字 sum(-1) = 0;,下標0
for (int i=0;i<nums.size(); i++){
s += nums[i] ?1 :-1;// 在這裏我們對前綴和進行相加,
if (hash.count(s)) {
result = max(result, i - hash[s]);// hash 裏面值的存的數據爲 字符串的下標
}
else {
hash[s] = i;// hash 的value 爲 下標,如果 和爲s 之前已經出現過的話,就不能往裏面相加了
}
}
return result;
}
};
// 加油加油 Try to make yourself more excellent...