给出一列数据,把它们分成两组,
且一组中各数据的和与另一数组
中数据的和的差最小,怎么划分这例数据?

解决方案 »

  1.   

    int[] nums = {8,7,6,2,0,8,3,5,1,9};
    java.util.Arrays.sort(nums);
    for (int i = nums.length-1; i >=0 ; i--) {
    System.out.print(nums[i]+" ");
    }
    System.out.println();
    List subA = new ArrayList();
    List subB = new ArrayList();
            long sumA = 0;
            long sumB = 0;
            
    List temp; for(int i=nums.length-1;i>=0;i--){
       if(i%2 == 0){
          subA.add(nums[i]);
          sumA += nums[i];
       }else{
      subB.add(nums[i]);
      sumB += nums[i];
      //switch
      temp = subA;
      subA = subB;
      subB = temp;
      
      sumA = sumA ^ sumB;
      sumB = sumA ^ sumB;
      sumA = sumA ^ sumB;
       }
    }

    System.out.println("subA="+subA+"sum="+sumA);
    System.out.println("subB="+subB+"sum="+sumB);
    System.out.println("subA-suB="+(sumA-sumB));
      

  2.   

    1.先排序啊 排序后 的集合为CA
    2.把最大的数移除 放进CB
    3.记录差值
    4.以后每次移除CA中最小的进入CB 并记录差 如果差值变大了那么将上一步的两组数组返回就这样啊