Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查数组元素的条件_Java_Arrays_Algorithm - Fatal编程技术网

Java 检查数组元素的条件

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)

我有一个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)
 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,此部分仅简化了数组。需要进一步操作才能获得答案。。。。