Leetcode 3719. Longest Balanced Subarray I

1. 解题思路

这一题是题目3721. Longest Balanced Subarray II的简单版本,只需要暴力求解即可,倒是没啥需要多说的。

不过可惜的是更有挑战的题目3721我没有搞定,还挺伤的……

2. 代码实现

给出python代码实现如下:

class Solution:
    def longestBalanced(self, nums: List[int]) -> int:
        n = len(nums)
        odd, even = defaultdict(int), defaultdict(int)
        for num in nums:
            if num % 2 == 0:
                even[num] += 1
            else:
                odd[num] += 1
        ans = 0
        for i in range(n):
            if n-i <= ans:
                break
            _odd, _even = deepcopy(odd), deepcopy(even)
            for j in range(n-1, i, -1):
                if j+1 - i <= ans:
                    break
                if len(_odd) == len(_even):
                    ans = j+1-i
                    break
                if nums[j] % 2 == 0:
                    _even[nums[j]] -= 1
                    if _even[nums[j]] == 0:
                        _even.pop(nums[j])
                else:
                    _odd[nums[j]] -= 1
                    if _odd[nums[j]] == 0:
                        _odd.pop(nums[j])
            if nums[i] % 2 == 0:
                even[nums[i]] -= 1
                if even[nums[i]] == 0:
                    even.pop(nums[i])
            else:
                odd[nums[i]] -= 1
                if odd[nums[i]] == 0:
                    odd.pop(nums[i])
        return ans

提交代码评测得到:耗时1303ms,占用内存18.25MB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值