2024-12-02:划分数组得到最小的值之和。用go语言,你有两个数组,nums 和 andValues,它们的长度分别为 n 和 m。定义数组的“值”为其最后一个元素。
你的任务是将 nums 划分为 m 个不重叠的连续子数组。对于第 i 个子数组 [li, ri],该子数组的所有元素通过按位与运算后,结果必须等于 andValues[i]。换句话说,对于所有的 1 <= i <= m,应该满足 nums[li] & nums[li + 1] & ... & nums[ri] == andValues[i],其中 & 表示按位与运算符。
你的目标是返回将 nums 划分为 m 个子数组时,得到的可能的最小子数组值之和。如果无法完成这样的划分,则返回 -1。
提示:
1 <= n == nums.length <= 10000。
1 <= m == andValues.length <= min(n, 10)。
1 <= nums[i] < 100000。
0 <= andValues[j] < 100000。
输入: nums = [1,4,3,3,2], andValues = [0,3,3,2]。
输出: 12。
解释:
唯一可能的划分方法为:
1.[1,4] 因为 1 & 4 == 0;
2.[3] 因为单元素子数组的按位 AND 结果就是该元素本身;
3.[3] 因为单元素子数组的按位 AND 结果就是该元素本身;
4.[2] 因为单元素子数组的按位 AND 结果就是该元素本身。
这些子数组的值之和为 4 + 3 + 3 + 2 = 12。
相似问题