type
status
date
slug
summary
tags
category
icon
password
创建时间
Feb 5, 2025 09:07 AM
给你一个只包含 非负 整数的数组
nums
。我们定义满足
l <= r
的子数组 nums[l..r]
的分数为 nums[l] AND nums[l + 1] AND ... AND nums[r]
,其中 AND 是按位与运算。请你将数组分割成一个或者更多子数组,满足:
- 每个 元素都 只 属于一个子数组。
- 子数组分数之和尽可能 小 。
请你在满足以上要求的条件下,返回 最多 可以得到多少个子数组。
一个 子数组 是一个数组中一段连续的元素。
位运算——与或(AND/OR)
分析
- AND 操作越多,最后的结果可能越小
- 又 1 得,数组中所有元素的 AND 操作是最小的,所有子数组不可能比其小。
因此,
- 当整体数组元素 AND 操作不为 0,则划分子数组,最后的值一定是增大的,我们不进行划分。
- 当整体数组元素 AND 操作为 0,说明存在划分的可能。我们可以从两个思路进一步分析:
- 子问题思路:我们可以在划分子数组的时候,类比。当子数组为 0,说明也存在划分的可能。我们可以找到这个子数组 AND 操作首次出现 0;
- 贪心思路:从第一个元素开始,进行 AND 操作,结果为 0。重新划分子数组。
参考 灵茶山艾府,更加简洁。