805. 数组的均值分割
题面
给定你一个整数数组 nums
我们要将 nums 数组中的每个元素移动到 A 数组 或者 B 数组中,使得 A 数组和 B 数组不为空,并且 average(A) == average(B) 。
如果可以完成则返回true , 否则返回 false 。
注意:对于数组 arr , average(arr) 是 arr 的所有元素的和除以 arr 长度。
数据范围
- $1 \leq n \leq 30$
 - $0 \leq nums[i] \leq 10^4$
 
题解
由于$1 \leq n \leq 30$, 考虑折半搜索。
分别对左侧数组和右侧数组进行二进制枚举,假设左侧选择了 $lc$ 个数字,和为 $ls$, 右侧选择了 $rc$ 个数字,和为$rs$,假设数组和为 $S$, 若要满足平均值相等,则有:
化简可得:$S\times lc - n \times ls$ = $-(S \times rc - n \times rs)$
预处理 $S\times lc - n \times ls$ 的值
- 注意边界情况,左侧和右侧不能同时全选
 
代码
1  | class Solution {  |