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。
LeetCode2871:数组切割成最大数量的和为零子数组,
本文介绍了如何使用贪婪算法解决LeetCode问题2871,通过分析所有数的与操作结果,确定何时进行数组切割以获得最多子数组和为零。给出了Python代码实现,并展示了评测结果。
1万+

被折叠的 条评论
为什么被折叠?



