文巾解题 525. 连续数组
生活随笔
收集整理的這篇文章主要介紹了
文巾解题 525. 连续数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 題目描述
2 解題思路
方便起見,我們將0~1數組看成-1~1數組。
什么時候子數組中-1和1的數量相同呢?那就是這個子數組里面的數字之和為0,此時所有的-1和1兩兩抵消了。
那么我們就想到前綴和sum,我們計算sum到每個坐標時候的前綴和結果。如果兩個坐標的前綴和結果一樣,那么這兩個坐標中間的部分就是一個滿足要求的子數組(比如sum[i]==sum[j],那么i+
1到j的這個子數組就是我們要的和為0的子數組)。
但即使出前綴和之后,如果再遍歷i和j,又需要O(n^2)的時間。于是我建了兩個哈希表,一個存放該前綴和第一次出現時候的下標;另一個存放該前綴和最后一次出現時的下標。
class Solution:def findMaxLength(self, nums: List[int]) -> int:dit_first={0:-1}dit_last={0:-1}#一個元素都沒有加,記sum到-1位的時候的前綴和tmp=0#遍歷到當前位的前綴和for i in range(len(nums)):if(nums[i]==0):tmp+=-1#將0看成-1else:tmp+=1if(tmp in dit_first):dit_last[tmp]=ielse:dit_first[tmp]=idit_last[tmp]=iret=0for i in dit_first.keys():if(dit_last[i]-dit_first[i]>ret):#第一次和最后一次前綴和出現的坐標之間的距離ret=dit_last[i]-dit_first[i]return(ret)?
總結
以上是生活随笔為你收集整理的文巾解题 525. 连续数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch 学习笔记:nn.Sequ
- 下一篇: 文巾解题 319. 灯泡开关