小编jpi*_*ncz的帖子

澄清答案...在SET中找到最大可能两个相等的和

我需要澄清这个问题的答案,但我不能评论(不够代表)所以我问了一个新问题.希望没关系.

问题是这样的:

给定一个数组,你必须找到最大可能两个相等的和,你可以排除元素.

即1,2,3,4,6给定数组我们可以有最多两个相等的和6 + 2 = 4 + 3 + 1

即4,10,18,22,我们可以得到两个相等的和18 + 4 = 22

除了蛮力找到所有计算并检查两个可能的相等和之外,你的解决这个问题的方法是什么?

编辑1:数组元素的最大数量为N <= 50,每个元素最多可达1 <= K <= 1000

编辑2:总元素总和不能大于1000.

批准的答案说:

我建议使用DP来解决这个问题,而不是跟踪A,B(两组的大小),而是跟踪A + B,AB(两组的总和和差异).

然后,对于数组中的每个元素,尝试将其添加到A或B,或两者都不添加.

跟踪总和/差异的优点是您只需要跟踪每个差异的单个值,即您在此差异中看到的总和的最大值.

我不承诺的是:

如果这是子集求和问题,我可以用DP解决它,具有(N×P)的记忆矩阵,其中N是集合的大小,P是目标总和......

但我无法弄明白我应该如何跟踪A + B,AB(如批准答案的作者所述).哪个应该是memoization矩阵的维度?以及这有助于解决问题?

答案的作者很友好地提供了一个代码示例,但由于我不懂python(我知道java),因此很难对我进行处理.

algorithm dynamic-programming

6
推荐指数
1
解决办法
494
查看次数

使用 Streams 将嵌套整数列表转换为二维数组 ( List&lt;List&lt;Integer&gt;&gt; -&gt; int[][] )

我搜索了类似的问题,但我只发现了不适用于这种情况的对象字符串:

想要转换List<List<Integer>> listint[][] array使用流

到目前为止我得到了这个:

int[][] array= list.stream().map(List::toArray)...
Run Code Online (Sandbox Code Playgroud)

我以我发现的其他类似问题为基础。但这些使用 String 并且不能使其适用于 Integers->int:

// Example with String 1:    
String[][] array = list.stream()
        .map(l -> l.stream().toArray(String[]::new))
        .toArray(String[][]::new);

// Example with String 2:    
    final List<List<String>> list = ...;
    final String[][] array = list.stream().map(List::toArray).toArray(String[][]::new);
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

0
推荐指数
1
解决办法
2037
查看次数