注意:我知道这里有人问过这个问题,但我没有正确理解解决方案,我也没有足够的观点来澄清我的质疑。(我是SO的初学者)
4 5 3 55 -3 23 3 20 100 90
有人能给我提供一个我可以应用的算法吗?
下面是已经提出(并回答)的问题的链接:将数组划分为两个大小相等的子集,它们的值之和相差最小。
递归实现(Java):
private static long minimalDiff(int[] nums, int sumA, int sumB, int indexA, int indexB) {
int index = indexA + indexB + 2;
if (index == nums.length) {
return Math.abs(sumA - sumB);
} else if (Math.max(indexA, indexB) * 2 > nums.length - 1) {
return Integer.MAX_VALUE;
} else if (Math.abs(sumA + nums[index] - sumB) < Math.abs(sumB + nums[index] - sumA)){
long result = minimalDiff(nums, sumA + nums[index], sumB, indexA + 1, indexB);
if (result > 0) {
result = Math.min(result, minimalDiff(nums, sumB + nums[index], sumA, indexB + 1, indexA));
}
return result;
} else {
long result = minimalDiff(nums, sumB + nums[index], sumA, indexB + 1, indexA);
if (result > 0) {
result = Math.min(result, minimalDiff(nums, sumA + nums[index], sumB, indexA + 1, indexB));
}
return result;
}
}
public static long minimalDiff(int[] num) {
if (num == null || num.length < 2){
throw new IllegalArgumentException("num");
}
return minimalDiff(num, 0, 0, -1, -1);
}
public static void main(String[] args) {
int [] test= {4, 5, 3, 55, -3, 23, 3, 20, 100, 90};
System.out.println("Answer: "+minimalDiff(test));
}
它打印:
Answer: 0
在长度为N的数组中求和最大的邻接子数组。 输入格式: 输出格式: 返回一个整数,表示相邻子数组的最大可能和。 制约因素: 输入2:A=[-2,1,-3,4,-1,2,1,-5,4] 产出2:6 说明2:子数组[4,-1,2,1]的最大可能和为6。 你能告诉我为什么下面的代码不起作用,代码中的错误是什么吗:
所以,我刚刚进行了一次在线编程评估,给了我两个问题,其中一个是这个连续的子数组和提供了两个复杂的编码问题+8个MCQ,并将在1小时内完成。 这里我将讨论上面提到的子数组的最大邻接和之一。通常,我发现困难的部分是处理负数和连续。我所做的是首先将应用到给定的数组,然后再次按照负值的绝对值排序,就像i的例如,对于给定的随机数组,我在每个i和所有j迭代后都有一个max,如果max 。
我看到一个问题,要求它找到所有相邻子阵列的最小值。例如,对于数组A=[1,2,3],答案将是一个包含[1,2,3,1,2,1]的数组B<怎么做- 我所做的是,构建了一个段树,但是它不包含所有连续子数组的最小值。 我也不认为我可以使用“脱钩”,因为我不必在特定长度的子数组中找到最小值。 那么,我如何获得所有连续子阵列(B阵列)的最小值?
我试图研究邻接子阵列,但我没有得到任何解释这个概念的研究材料。 但是我发现了一个例子,它说给定数组[-2,1,-3,4,-1,2,1,-5,4],相邻的子数组是[4,-1,2,1]
我试图通过DP找到所有子数组的加权平均值,然后按列排序,找到长度相同的2。但我无法继续下去,我的方法似乎太模糊/太粗暴了。我将非常感谢任何帮助。提前谢了。
例如:如果数组是[9,8,7,6,5,4,3,1,2,2],它应该返回46(长度为7的子数组[9,8,7,6,5,4,3]和长度为2的子数组[2,2]之和)。不能组合[9,8,7,6,5,4,3]和[1,2,2],因为这将产生长度为10的非素数的连续子数组(幂等性)。 有谁能解释一下如何使用DP来解决这类问题吗?多谢了。
实现图的最简单的方法之一是使用二维矩阵。在该矩阵实现中,每个行和列表示图中的顶点。存储在行 v 和列 w 的交叉点处的单元中的值表示是否存在从顶点 v 到顶点 w 的边。 当两个顶点通过边连接时,我们说它们是相邻的。 Figure 3 展示了 Figure 2 中的图的邻接矩阵。单元格中的值表示从顶点 v 到顶点 w 的边的权重。 Figure 3 邻接矩阵的优点是简单,对于小图,很容易看到哪些节