- Leetcode 2871. Split Array Into Maximum Number of Subarrays
- 1. 解题思路
- 2. 代码实现
- 题目链接:2871. Split Array Into Maximum Number of Subarrays
1. 解题思路
这一题实现上其实还是比较简单的,就是一个贪婪算法,主要就是思路上需要想想清楚。
显然,如果所有数的与操作结果不为0,那么要使得结果最小,那么有且只有一种分法,那就是完全不进行切割,否则切割之后的两个子序列一定均不为0,其和必然大于不切分的结果。
因此,要考虑的就是所有数的与操作结果为0的情况,此时必然有所有分割之后的子串的与操作结果均为0,此时,我们用一个贪婪算法找到所有切割之后与操作结果为0的子串即可。
2. 代码实现
给出python代码实现如下:
class Solution:def maxSubarrays(self, nums: List[int]) -> int:cnt = 0is_start = Truefor x in nums:if is_start:s = xis_start = Falseelse:s = s & xif s == 0:cnt += 1is_start = Truereturn max(cnt, 1)
提交代码评测得到:耗时806ms,占用内存26.8MB。