525. HASH 連續數組

525. 連續數組

給定一個二進制數組, 找到含有相同數量的 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...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章