🗒️2871. 将数组分割成最多数目的子数组
2025-2-5
| 2025-2-5
0  |  阅读时长 0 分钟
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)

分析
  1. AND 操作越多,最后的结果可能越小
  1. 又 1 得,数组中所有元素的 AND 操作是最小的,所有子数组不可能比其小。
因此,
  • 当整体数组元素 AND 操作不为 0,则划分子数组,最后的值一定是增大的,我们不进行划分。
  • 当整体数组元素 AND 操作为 0,说明存在划分的可能。我们可以从两个思路进一步分析:
    • 子问题思路:我们可以在划分子数组的时候,类比。当子数组为 0,说明也存在划分的可能。我们可以找到这个子数组 AND 操作首次出现 0;
    • 贪心思路:从第一个元素开始,进行 AND 操作,结果为 0。重新划分子数组。
 
参考 灵茶山艾府,更加简洁。

📎 参考

  • 【题单】位运算
  • 2401. 最长优雅子数组2588. 统计美丽子数组数目
    Loading...