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

如何对列表进行分区的方法

李泓
2023-03-14

假设我有n个值为x[i]的元素。让所有值的总和表示为X,我们强制每个元素都是x[i]

我被这个问题难住了一段时间。我发现有些情况下这实际上是不可能做到的,但除此之外,我只研究了贪婪的方法:将元素< code>x[i]放入具有最小累积和的分区中。对如何解决这个问题有什么想法吗?

共有1个答案

顾骏祥
2023-03-14

确定你被发现反例吗?我的数学可能是错的,但似乎不可能构建这样一个列表。让我们注意,对于三个元素的列表

考虑到这一点,我们将数字分为三个格,每个格的总和小于N/2。请注意,如果我们有四个元素a

我们可以从这里无限重复这个逻辑。以我们的列表为< code>x,要使< code>a b大于< code>N/2,我们需要< code>(a b) * 2

应用这个递归逻辑,我们可以从nbins向上构建到三个bins,将它们视为第一段中的a, b, c数字,并以这种方式构建我们的答案。

从算法上讲,创建一堆节点,其中包含数组中的每个元素(作为长度为1的列表)和sum(目前等于元素本身)。将它们插入到最小堆中,并以sum为键。弹出最小两个,合并它们(连接元素列表,添加总和)并返回到最小堆中。冲洗并重复,直到堆中有两个节点。它们现在包含您的解决方案。

 类似资料:
  • 我有一个蜂巢表2columns.EmployeeID和工资。 数据如下所示。 我想根据薪金列创建分区。例如划分为10000到20000,20001到30000的工资范围。 我如何实现这一点。

  • 问题内容: 我有一个清单,我想分成几个小清单。 说出所有包含“ aaa”的项目,所有包含“ bbb”的项目以及更多谓词。 我该如何使用java8? 我看到了这篇文章,但只拆分为2个列表。 我看到了这篇文章,但是在Java 8之前已经很老了。 问题答案: 就@RealSkeptic中解释的那样,注释只能返回两个结果:true和false。这意味着您将只能将数据分为两组。 您需要的是某种可以让您确定应

  • 问题内容: 我有一个列表列表(由于必须动态生成它,所以不能是元组),它的结构为一个int和一个float的列表列表,像这样: 我想对它进行排序,但我只能设法获得内置的排序功能,以便按列表的第一个元素对其进行排序,或者什么也不做,但是我需要按列表的第二个元素对它们进行排序,但是我没有不想实现我自己的排序功能。所以我想要的一个例子是: 有人可以告诉我如何获取内置的排序功能之一来执行此操作吗? 问题答案

  • 给定一个< code>java.util.List和< code>n个元素以及一个期望的页面大小< code>m,我想将它转换成一个包含< code>n/m n%m个元素的映射。每个地图元素应包含< code>m个元素。 这里有一个整数的例子: 使用Java 8,这是可能的吗?

  • 问题内容: 给定一个with 元素和所需的页面大小,我想将其转换为包含元素的地图。每个地图元素应包含元素。 这是一个整数示例: 使用Java 8可以吗? 问题答案: 您可以将其与收集器和方法结合使用(感谢Duncan的简化)。 首先,您需要计算地图中所需的键数。这是通过(这是流的限制)给出的。 然后,您创建一个创建序列的Stream 。 现在,对于每个值,您将抓住对应的值,这将是我们的值(您需要对

  • 问题内容: 我想知道,流(或收集器)中是否已经有一个已实现的功能,已将列表作为值进行了排序。例如,以下代码均产生按年龄分组的按性别分组的人员清单。第一个解决方案具有一些开销排序(看起来有些sc琐)。第二种解决方案需要对每个人进行两次检查,但是必须做到很好。 首先排序,然后分组为一个流: 首先分组,然后对每个值进行排序: 我只是想知道,是否已经实现了某项功能,该功能可以一次运行,例如。 问题答案: