Re: [閒聊] 每日leetcode

作者: DJYOSHITAKA (Evans)   2024-03-17 11:01:00
今天的做過了
補一下昨天的 恨525
525. Contiguous Array
一開始就往subarray sum想
若nums[i:j]符合條件,表示sum[i:j] == (j-i+1)/2 (整除時)
原本想說就照這個條件,記下prefix sum,每個j都往前找各個i
但看了一下size <= 50000,想當然不是這樣
後來發現其實只要把0都改成-1,
就只需要確認prefix sum與自己相等的那個地方就可以了
只需要用個map記下最早出現這個prefix sum的index即可
好像在哪裡也用過這招,有點忘記了
int findMaxLength(vector<int>& nums) {
int n = nums.size();
unordered_map<int,int> mp;
int prefix = 0;
int ans = 0;
mp[0] = -1;
for(int i=0; i<n; i++)
{
prefix += (nums[i] == 0 ? -1 : 1);
if(mp.find(prefix) != mp.end())
{
ans = max(ans, i-mp[prefix]);
}
else
{
mp[prefix] = i;
}
}
return ans;
}
作者: sustainer123 (caster)   2024-03-17 11:04:00
大師
作者: TokiwaKurumi (常磐胡桃)   2024-03-17 11:05:00
愛五寶

Links booklink

Contact Us: admin [ a t ] ucptt.com