LeetCode 525. 連續陣列(C++、python)
阿新 • • 發佈:2018-11-21
給定一個二進位制陣列, 找到含有相同數量的 0 和 1 的最長連續子陣列。
示例 1:
輸入: [0,1] 輸出: 2 說明: [0, 1] 是具有相同數量0和1的最長連續子陣列。
示例 2:
輸入: [0,1,0] 輸出: 2 說明: [0, 1] (或 [1, 0]) 是具有相同數量0和1的最長連續子陣列。
注意: 給定的二進位制陣列的長度不會超過50000。
class Solution { public: int findMaxLength(vector<int>& nums) { int n=nums.size(); int res=0; int sum=0; map<int,int> tmp; tmp[0]=-1; for(int i=0;i<n;i++) { if(1==nums[i]) { sum+=1; } else { sum-=1; } if(0==tmp.count(sum)) { tmp[sum]=i; } else { int cc=i-tmp[sum]; res=max(res,cc); } } return res; } };
python
class Solution: def findMaxLength(self, nums): """ :type nums: List[int] :rtype: int """ n=len(nums) res=0 dic={} dic[0]=-1 ss=0 for i in range(n): if 1==nums[i]: ss+=1 else: ss-=1 if ss not in dic: dic[ss]=i else: cc=i-dic[ss] res=max(res,cc) return res