如何将一个数组分成两部分,使得两部分的平均数相等?每个分区可能包含数组中不连续的元素。 我能想到的唯一算法是指数型,我们可以做得更好吗?如何将一个数组分成两部分,这两部分的平均值相等?
7
A
回答
12
您可以将此问题减少到sum-subset problem - 也cached here。这是主意。
让A
为数组。计算S = A[0] + ... + A[N-1]
,其中N
是A
的长度。对于k
,从1
到N-1
,请让T_k = S * k/N
。如果T_k
是整数,则找到大小为k
的A
的子集,其总和为T_k
。如果你能做到这一点,那么你就完成了。如果您无法对k
执行此操作,则不存在此类分区。
这是这种方法背后的数学。假设有一个分区A
,这样两部分的平均值相同,说大小的X
和大小y
的Y
是分区,其中x+y = N
。然后,你必须有
sum(X)/x = sum(Y)/y = (sum(A)-sum(X))/(N-x)
所以有点代数给人
sum(X) = sum(A) * x/N
由于数组包含整数,左手边是一个整数,所以右侧必须为好。这激发了T_k = S * k/N
必须是整数的限制。唯一剩下的部分是将T_k
作为k
大小的子集的总和。
相关问题
- 1. 如何将一个NSArray分成两个相等的部分?
- 2. 如何将一行分成两部分?
- 3. 如何在两个相等的部分
- 4. Coldfusion将数组分成两部分
- 5. 将图像分成两个相等的部分python opencv
- 6. 将一个数组列表划分为两个相等的部分
- 7. 将wordpress分成两部分
- 8. 将PDL分成两部分
- 9. 将列分成两部分
- 10. 如何将文字分成两部分
- 11. 如何将点分成两组 - 分布的上下部分
- 12. 如何将这个字符串分成两部分?
- 13. 计算数组部分的平均值
- 14. 根据密钥的值将散列数组分成两部分
- 15. 将一组数字分成两部分,其中差异最小
- 16. F#:递归函数:将列表拆分成两个相等部分
- 17. 将树拆分成相等部分
- 18. 将文本拆分成相等部分
- 19. 将饼图分成相等部分jfreechart
- 20. 将视图拆分成相等部分
- 21. 将单独的列表分成两个相等的部分和切片
- 22. 确定在java中两个数组的部分是否相等
- 23. 将一个数据帧分成两部分-R
- 24. Matlab - 将列分成两部分(高效)
- 25. 沿着UIBezierPath将UIImage分成两部分
- 26. PHP foreach:将循环分成两部分
- 27. 两个部分
- 28. 在红宝石中将数组拆分成相等部分
- 29. 列的一部分的平均值
- 30. 如何根据2个不同的列值将一行分成两部分
说实话,这是一个功课题吗? – 2012-01-18 17:59:53
你有什么尝试?它有用吗?你有没有例子输入和输出的测试用例? – 2012-01-18 18:00:14
这听起来更像是一个面试问题,而不是一个容易的问题 – BrokenGlass 2012-01-18 18:05:14