我有两个列表,一个用于正面,另一个用于负面(我将其转换为正值以便轻松减去)。 我试图用正值减去这些值。
到目前为止,我已经实现了在列表中两个数字相等的情况下使值为零(例如:10和-10,或者20和-20)。
输出应为[0,0,0,5,0,0,0,0],因为在负面列表中找到匹配后,所有值都为零。
for (int b = 0; b < negativeValues.size(); b++) {
for (int e = 0; e < positiveValues.size(); e++) {
pvalues = positiveValues.get(e);
nvalues = negativeValues.get(b);
if (pvalues == nvalues) {
result = pvalues - nvalues;
positiveValues.set(e, 0.0);
negativeValues.set(b, 0.0);
// System.out.println(pvalues+" "+nvalues+" "+positiveValues+" "+negativeValues);
continue;
}
if (positiveValues.get(e) != 0 && negativeValues.get(b) != 0
&& positiveValues.get(e) <= negativeValues.get(b)) {
max = Collections.max(negativeValues);
posVal1 = positiveValues.get(e);
indexOfPos = positiveValues.indexOf(posVal1);
// System.out.println(posVal1+ " "+max+" "+indexOfPos);
difference = max - posVal1;
System.out.println(difference + " " + posVal1);
while (difference <= 0) {
posVal1 = positiveValues.get(e);
}
}
}
}
这里也是伪代码。
i) one list for negative numbers and sorted
ii) one list for postivie numbers and sorted
iii)iterate and start with the maximum number in negative list
iv) check the index of the equal or lesser number in the positive list
v) iterate the positive list using from this index:
a) if current positive number
1) equal to negative number - nullify and put them in map, go to next negative number
2) else if less than negative number -
i) get the difference of this positive number and the negative number
ii) create a variable for this difference and put it in while loop
iii) search for the index of the number equal to or lesser to this difference.
iv) get the second positive number and if is
a) equal to difference, nullify all by updatng index of the negative and two positives numbers as NA
update difference to 0 and exit while and go to next negative number
b) else if the second positive number is less than the difference, sum the two numbers and negative number
and get the difference and update the difference variable with this new value and iterate while loop
c) if there is no lesser or mathcing number equal to difference, come out of while and pick the next element in positive list as done in step (v) and get next number and repeat further.
答案 0 :(得分:0)
我认为解决方案并不简单。 您想要找到组合的总和。为此,您必须使用递归函数。
例如,我的解决方案:
static boolean find;
static boolean[] flag;
public static void findNumber(List<Integer> list, int sumNumber, int targetNumber) {
if (sumNumber == targetNumber) {
System.out.println("Find Number");
find = true;
return;
}
for (int i = 0; i < list.size(); i++) {
if (flag[i] == false && list.get(i) + sumNumber <= targetNumber) {
flag[i] = true;
findNumber(list, sumNumber + list.get(i), targetNumber);
if (find)
return;
flag[i] = false;
}
}
}
public static void main(String[] args) {
List<Integer> positiveList = new ArrayList<Integer>();
List<Integer> negativeList = new ArrayList<Integer>();
for (int i = 0; i < negativeList.size(); i++) {
flag = new boolean[positiveList.size()];
find = false;
findNumber(positiveList, 0, negativeList.get(i));
if (find) {
negativeList.set(i, 0);
for (int j = 0; j < positiveList.size(); j++) {
if (flag[j])
positiveList.set(j, 0);
}
}
}
System.out.println("PositiveList: " + positiveList);
System.out.println("NegativeList: " + negativeList);
}
我不确定你想要的解决方案。