2017-06-21 121 views
-1
  1. 我有两个列表,一个用于正数,另一个用于负数(我将它转换为正数以轻松减法)。 我试图用正值减去这些值。添加多个正值并用匹配的数字减去它

  2. 到目前为止,我实现使零值,其中两个数字是在列表中相等(例如:10和-10,或20 -20)。

  3. 但是,也有肯定列表一些值(例如:3,2,2,1),它可以匹配为负值(如:-8)在列表中,使所有的值为零。这是我无法弄清楚的部分。请尽量帮忙!
  4. 如果输入(再次获得从Excel工作表这些值并将其存储在一两个单独的列表,一个用于正和负其他)为:POS = [10,20,46,5,3,2,2,1 ]和neg = [ - 10,-20,-8,-46]。
  5. 输出应该是[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

请,您的问题提供例如输入和输出。 – Nurjan

+0

@Nurzhan Look,它的'简单,只需找到可能的值,可以加上负数,然后使它们全部为零。 –

+0

如果'pos = [8,15]'和'neg = [3,5,10]'会怎么样? –

回答

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); 

} 

我不知道这个解决方案,你想要的。