groupSumClump(0, {2, 4, 8}, 10) → true
groupSumClump(0, {1, 2, 4, 8, 1}, 14) → true
groupSumClump(0, {2, 4, 4, 8}, 14) → false --> Failing Test Case
groupSumClump(0, {8, 2, 2, 1}, 9) → true --> Failing Test Case
groupSumClump(0, {8, 2, 2, 1}, 11) → false --> NegativeArraySizeException
我已经做了一些初步的分析,以下是部分代码:
public boolean groupSumClump(int start, int[] nums, int target) {
start = 0;
boolean flag = false;
// get the highest int from the list of array we have
int highestInteger = getTheBiggest(nums);
if (highestInteger > target) {
flag = false;
} else {
int variable = 0;
for (int i = 0; i < nums.length; i++) {
variable += nums[i];
}
if (variable == target) {
flag = true;
} else {
if (variable < target) {
flag = false;
} else {
// here goes ur grouping logic here
flag = summate(highestInteger, target, nums);
}
}
}
return flag;
}
private boolean summate(int highestInteger, int target, int[] nums) {
boolean val = false;
if (highestInteger == target) {
val = true;
} else {
int[] temp = new int[nums.length - 1];
int var = 0;
if ((target - highestInteger) > 0) {
for (int j = 0; j < nums.length-1; j++) {
if (nums[j] != highestInteger) {
temp[var] = nums[j];
if (temp[var] == (target - highestInteger)) {
val = true;
return val;
}
var++;
}
}
val = summate(getTheBiggest(temp), target - highestInteger,
temp);
}
}
return val;
}
private int getTheBiggest(int[] nums) {
int biggestInteger = 0;
for (int i = 0; i < nums.length; i++) {
if (biggestInteger < nums[i]) {
biggestInteger = nums[i];
}
}
return biggestInteger;
}
请注意:我不知道如何处理以下问题陈述的逻辑: 问题有一个“附加约束条件”,即如果数组中有相邻且相同值的数字,则必须选择它们全部或不选。例如,对于数组{1,2,2,2,5,2},必须选择或不选择中间的三个2,作为一组。(可以使用一个循环来查找相同值的范围)。
如何处理上述问题中这部分逻辑。 我一直在努力尝试,但无法正确处理。 欢迎提供建议。 您能告诉我代码有什么问题/如何处理这个问题的附加约束条件吗,:-((
附加约束条件表示要么选择为一组,要么不选择为一组。所以我不知道该如何继续进行。如果您能帮忙,将不胜感激。
编辑用户->MISSINGNO:我已经将下面的代码构造添加到了上面的主要代码中,但它打印出了错误的值。我错在哪里了。
groupSumClump(0, {2, 4, 4, 8}, 14) → false 失败了 2 8 4 标志是--〉true,这是错误的。
for(int number=0;number<nums.length-1;number++){
if(nums[number]==nums[number+1]){
nums[number]=nums[number]+nums[number+1];
}
}
{1, 2, 2, 2, 5, 2} --> {1, 6, 0, 0, 5, 2}
。 - Dante May Code