Java 检查数组元素的条件
我有一个nums[]和target的数字数组,它满足以下条件 {{nums[],target}Java 检查数组元素的条件,java,arrays,algorithm,Java,Arrays,Algorithm,我有一个nums[]和target的数字数组,它满足以下条件 {{nums[],target} 1> {{8, 2, 2, 1},12} --> returns true 2> {{8, 2, 2, 1},9} --> returns true 1 condition> identical adjacent values with a subset of remaining numbers sum to target (or)
1> {{8, 2, 2, 1},12} --> returns true
2> {{8, 2, 2, 1},9} --> returns true
1 condition> identical adjacent values with a subset of remaining numbers sum to target (or)
2 condition> identical adjacent values are not chosen such that subset of other numbers sum to target.
so that in this example
1> 8+2+2 = 12.
2> 8+1=9.
如何在Java中处理上述两个条件
为但丁编辑:应进行此运行
groupSumClump(0,{2,4,8},10)→ 正确正确正确
groupSumClump(0,{1,2,4,8,1},14)→ 正确正确正确
groupSumClump(0,{2,4,4,8},14)→ false false OK
groupSumClump(0,{8,2,2,1},9)→ 真假X
groupSumClump(0,{8,2,2,1},11)→ false false OK
groupSumClump(0,{1},1)→ 真假X
groupSumClump(0,{9},1)→ false false OK
其他测试为假X *但丁的代码:
@Dante,请检查上面的链接,上面提到的测试场景失败。您可以使用两个局部变量同时解决这两种情况:一组“孤独”数字和一个“相邻”值的累加器: 单步遍历数组 对于每个值,检查上一个值(如果有)和下一个值(如果有) 如果其中一个与当前值相同,则增加“相邻”累加器,否则将该值添加到“孤独数字”集合 要检查条件2,从目标中减去“相邻”累加器的值,对于条件1,保持不变
问题的其余部分是确定“孤立集”中的某些值子集是否与目标值求和。这是一个众所周知的数值问题,计算成本很高(指数努力),但编程并不困难。如果你搜索它的名称,你可以找到许多解决方案:它被称为“背包问题”。我看到你在这个问题上挣扎了很长时间,所以,这里有一些代码 编辑
int nums_another[] = new int [nums.length];
int i = 0;
int j = 0;
i++;
int c = 1;
while (i < nums.length){
if (nums[i] == nums[i-1]) { // count identical numbers
c++;
}
else { // not identical, store sum of previous identical numbers (possibly only 1 number)
if (nums[i-1] != 0) {
nums_another[j] = nums[i-1] * c;
j++;
}
c = 1;
}
i++;
}
if (nums[i-1] != 0) { // store last
nums_another [j] = nums[i-1] * c;
}
int nums\u另一个[]=new int[nums.length];
int i=0;
int j=0;
i++;
int c=1;
而(i
现在,nums_的另一项内容包括:
- 相邻相同数字组的和(在您的例子中为4=2+2)
- 不相同的数字(在您的案例中为8,1)
- 最后是0(因此在所有8 4 1 0中)
顺便说一下,代码的问题在于: 因为您立即将下一个相同的数字设置为0,它将失败3次或更长时间
例如,8 2 2 2 1->8 4 0 2 1而不是->8 6 0 0 1请发布您目前拥有的(真实)代码,并指出您遇到困难的地方。(2)根据第二个条件,应该返回false。第一个条件对我来说也没有意义,为什么你要在和中加
8
,而不是1
?如果你有{8,2,2,1,2,2,2,1,12}?我们应该如何处理多组相同的相邻数字?@wds-1)如果我理解正确,使用2+2
你只需要8就可以实现目标12。2)你不允许使用2 2
,因为相邻和相同。要实现目标9,你需要8和1。@Ishtar我现在得到1(您必须找到与目标相加的剩余数字),但2)表示剩余数字的总和不应达到目标值,因此该值不应返回false吗?例如two then?@Kilian。您能为我提供相同的代码修复吗,我现在正在努力解决这个问题一周。如果您能为第一部分提供代码段方法,我将不胜感激:boolean cond(int[]a,int which,int target){int paired=0;List unpaired=new LinkedList();for(int i=0;i0&&a[i-1]==current | i
knapsack()需要递归。试试看,如果你卡住了,再问另一个问题!@Dante,代码是在写的,我没有得到你解释过的总和。你能详细说明一下吗???我认为它输出的值是错误的,它等于1,检查@user756993,在你的输出代码中没有的。顺便说一下,答案是为不寻常的情况编辑了一点。@Diante,它适用于原始问题案例1)返回{8,4,1,0},12},但对于原始问题案例2)它也返回{8,4,1,0},实际上它应该返回{8,1,0,0}这没有发生。您能检查一下这有什么问题吗?。感谢您的立即帮助。非常感谢您。代码位于@user756993,此部分仅简化了数组。需要进一步操作才能获得答案。。。。