当前位置: 首页 > 知识库问答 >
问题:

求所有可能子集的MAX和MIN差值之和

明星剑
2023-03-14

给定一组元素,如何在此列表的所有子集中找到MAX和MIN之间的差异。

例如:

集合=1 2 3

Subset = {1}, max(s)-min(s) = 0.  
Subset = {2}, max(s)-min(s) = 0.
Subset = {3}, max(s)-min(s) = 0.
Subset = {1,2}, max(s)-min(s) = 1.
Subset = {2,3}, max(s)-min(s) = 1.
Subset = {1,3}, max(s)-min(s) = 2.
Subset = {1,2,3}, max(s)-min(s) = 2.

So the output will be 1+1+2+2 = 6

共有2个答案

艾学海
2023-03-14

@mukul你可以计算2的所有幂,并将它们存储在一个同时取mod的数组中,就像

a[0]=1; for(i=1;i<any_no;i++)a[i]=(a[i-1]*2)%MOD;
岳谦
2023-03-14

对列表排序。

排序后,i'th元素将在所有(且仅)不包含i-1第一个元素且包含此元素的子集中最小。其中有2个(n-i)(当i基于1时)。

类似地,i将是每个子集中的最高元素,该子集在i之后不包含任何数字,并且确实包含i,并且存在2^(i-1)这样的子集(同样,基于1)。

因此,排序后,只需迭代,对于每个i添加:

arr[i] * (2^(i-1) - 2^(n-i))

通过arr[i]*#times_i_is_max有效地添加总和,并通过arr[i]*#times_i_is_min

在您的示例中:

sorted=1,2,3
1* (2^0 - 2^2) + 2*(2^1 - 2^1) + 3*(2^2 - 2^0) =
1*(-3) + 2*0 + 3*(3) = -3 + 0 + 9 = 6

算法的瓶颈是排序,即O(nlogn)-之后,一切都在阵列的线性扫描中完成。

 类似资料:
  • 求给定数组的连续子集的最大可能差之和。 我们得到一个由n个非负整数(允许重复元素)组成的数组arr[],求出给定数组中相邻子集的最大差之和。 假设max(s)表示任何子集's'中的最大值,而min(s)表示集合's'中的最小值。我们需要为所有可能的子集找到max(s)-min(s)的总和。 解释: 约束条件: 这是从此处获取的代码,但此代码检查所有可能的子集,而不是连续的子集: 那么如何只得到连续

  • 假设我知道最小和最大id,我需要的是所有id都在最小和最大id之间。假设

  • 问题内容: 我想做一些域验证 在我的对象中,我有一个整数, 现在我的问题是我是否写 和 如果是整数,则哪一个适合域验证。 有人可以解释一下两者之间的区别吗? 谢谢。 问题答案: 和用于验证数字字段,其可以被(代表数字), ,, 等和它们各自的原始包装。 用于检查字段的长度约束。 按照文档的支持,,和而和支持原语及其包装。请参阅文档。

  • 在一次采访中被问及这个问题,没有比生成所有可能的子集更好的答案了。例子: 采访者试图暗示对数组进行排序应该会有所帮助,但我仍然无法找到比暴力更好的解决方案。非常感谢您的意见。

  • 问题内容: 在为应用程序构建架构时遇到一个问题。 何时使用和。我的意思是应该使用它的确切用例。我也曾在网上冲浪,但我能够得到确切的答案。 任何人都可以提出一些确切的用例。 问题答案: 这是针对Microsoft SQL Server的 : 是 Unicode- 每个字符2个字节,因此最大。10亿个字符;可以处理东亚语,阿拉伯语,希伯来语,西里尔字母等字符。 就是 非Unicode -每个字符1个字

  • 问题内容: 任何人都可以从官方MySQL文档中澄清这一点 使用索引…查找特定索引列key_col的MIN()或MAX()值。这由预处理器优化,该预处理器检查是否在索引中在key_col之前出现的所有关键部分上使用WHERE key_part_N =常量。在这种情况下,MySQL对每个MIN()或MAX()表达式执行一次键查找,并将其替换为常量。如果所有表达式都用常量替换,查询将立即返回。例如: S