Leetcode 2871. Split Array Into Maximum Number of Subarrays

本文介绍了如何使用贪婪算法解决LeetCode问题2871,通过分析所有数的与操作结果,确定何时进行数组切割以获得最多子数组和为零。给出了Python代码实现,并展示了评测结果。
摘要由CSDN通过智能技术生成

1. 解题思路

这一题实现上其实还是比较简单的,就是一个贪婪算法,主要就是思路上需要想想清楚。

显然,如果所有数的与操作结果不为0,那么要使得结果最小,那么有且只有一种分法,那就是完全不进行切割,否则切割之后的两个子序列一定均不为0,其和必然大于不切分的结果。

因此,要考虑的就是所有数的与操作结果为0的情况,此时必然有所有分割之后的子串的与操作结果均为0,此时,我们用一个贪婪算法找到所有切割之后与操作结果为0的子串即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def maxSubarrays(self, nums: List[int]) -> int:
        cnt = 0
        is_start = True
        for x in nums:
            if is_start:
                s = x
                is_start = False
            else:
                s = s & x
            if s == 0:
                cnt += 1
                is_start = True
        return max(cnt, 1)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值