【问题标题】:Finding a subset in java在java中查找子集
【发布时间】:2016-04-10 01:33:39
【问题描述】:

我有点熟悉什么是子集,但我很难理解下面是如何得到两个子集的?有人可以指出我们如何只得到两个子集。我只是认为它会有更多的子集。

一个数 m 被定义为 A 的一些子集 S 的大小,其中每个元素覆盖一个完整的整数范围;也就是说,如果要对 S 中的元素进行排序,则任何元素 j 和 j+1 之间的差值要么是 0 要么是 1。例如 A = {5, 4, 4, 8, 8} 给了我们一个子集{4, 4, 5} 和 {8,8};这些子集的 m 值分别为 3 和 2。

【问题讨论】:

  • 主要问题:如果您认为应该有更多的子集,您认为应该还有哪些其他子集?第二个问题:这和Java有什么关系? (我知道您可能需要为此编写一个 Java 程序,但到目前为止您还没有问过编程问题)。
  • 另外,请注意,在数学中,“集合”永远不会有重复的元素。一个元素要么在集合中,要么不在;它永远不会出现多次。这看起来更像是multiset

标签: java arrays algorithm subset


【解决方案1】:

关键语句是:

任何元素 j 和 j+1 之间的差值要么是 0 要么是 1

所以,对于

A={5,4,4,8,8}

A 已排序,在遍历元素时,如果当前元素和下一个元素(j 和 j+1)彼此相差 0 或 1,则它们属于子集。

因此,当您遍历时:

A[0]=5 and A[1] = 4 : difference 1 - add to subset {5,4}
A[1]=4 and A[2]= 4 : difference 0 - add to subset {5,4,4}

A[2]=4 and A[3] = 8: difference is 4 - Start new subset {8}
A[3] = 8 and A[4] = 8] : difference is 0 - Add to subset {8,8}

【讨论】:

  • 先生,您真棒。非常感谢您的澄清,我已经挂了一段时间了。
猜你喜欢
  • 2015-05-09
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多