leetcode第114场双周赛 - 3 贪心

2871. 将数组分割成最多数目的子数组

位与肯定是越来越小的
子数组的位与结果 \(\ge\) 整个数组的位与结果
当整体位与结果不为 0 时,最小的划分方法就是划分整体;
当整体位与结果为 0 时,仅我们可以从前往后遍历,每位与一次 0 即贡献一次答案,如果末尾有不为 0 的子数组可以合并到前面最后一个上去

class Solution {
	public:
	int maxSubarrays(vector<int>& n) {
		int ans = 0, a = -1;
		for(auto x : n){
			a &= x;
			if(a == 0){
				++ ans; a = -1;
			}
		}
		return max(ans, 1);
	}
};
posted on 2023-10-06 02:30  Qiansui  阅读(9)  评论(0编辑  收藏  举报