問題陳述::在Java中,給定一個int數組,是否可以選擇一組int值,從而使得該組與給定的目標相加,並附加這個約束:如果存在數組中相鄰且相同值的數字,它們必須全選或全選。例如,對於數組{1,2,2,2,5,2},中間的所有三個2必須被選擇或不被選擇,全部作爲一個組。 (一個循環可用於查找相同值的範圍)。Java算法問題
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;
}
請注意:我不知道如何處理以下問題陳述的邏輯: 有一個Additional Constraint
的問題,例如,如果有數組在相鄰和相同價值的數字,他們必須要麼全部選擇,要麼沒有選擇。例如,對於數組{1,2,2,2,5,2},中間的所有三個2必須被選擇或不被選擇,全部作爲一個組。 (一個循環可用於查找相同值的範圍)。
我應該如何處理上述問題中的這部分邏輯。 我一直在努力爭取這個權利,不知道。 提供的建議將不勝感激。 你讓我知道什麼是代碼問題/如何處理這個問題的附加約束: - ((
其他約束說,你選擇作爲一個組,而不是選擇作爲一個group.so我不知道如何proceed.if u能請幫me.it可以理解
編輯USER-> MISSINGNO:我已經添加了下面的代碼結構,以上述主要代碼,並打印我的錯values.where我錯了
groupSumClump(0,{2,4,4,8},14)→false再次失敗該標誌是 - > true,這是錯誤的。
for(int number=0;number<nums.length-1;number++){
if(nums[number]==nums[number+1]){
nums[number]=nums[number]+nums[number+1];
}
}
這也是我回答了 - 你:) – extraneon 2011-05-15 14:20:37
剛過什麼是我需要的代碼改變now.i中號無法繼續。 – 2011-05-15 14:20:54
我很肯定你可以從現在開始做這件事。我們在這裏沒有給出家庭作業問題的代碼。 – hugomg 2011-05-15 14:25:42