如何浏览数组并添加某些值?

时间:2012-11-20 18:12:19

标签: java

我会尝试更好地解释它。

所以k = 2。 在[]利润=新{1,2,3,1,6,10}

第一部分应该是:

1,2,3

然后查找{1,2,3}中的最小值,即1.然后将其添加到下一个值1.因此它将是1 + 1。结果将是{2,3,2}。再次查找最小值为2并将其添加到下一个值6.因此它将是2 + 6。结果将是{3,2,8}。最后,对于{3,2,8}中的最小值并将其添加到下一个值10.因此它将是10 + 2。结果是{2,8,10}。然后寻找最小值2.

如果你们至少可以指导我如何做到这一点?

这是测试人员:

import java.util.Arrays ;

 /**
 Presents some problems to the BillBoard class.
 */

public class BillboardTester {

    public static void main(String[] args) {
    int[] profits = new int[]{1, 2, 3, 1, 6, 10} ;

        int k = 2 ;

        System.out.println("Profits: " + Arrays.toString(profits) + "   k = " + k)  ;

        Billboard bb = new Billboard(profits, k) ;
        System.out.println("Maximum Profit = " + bb.maximumProfit()) ;
        System.out.println(bb) ;

        k = 3 ;
        profits = new int[]{7, 4, 5, 6, 1, 7, 8, 9, 2, 5} ;
        System.out.println("Profits: " + Arrays.toString(profits) + "   k = " + k)  ;
        bb = new Billboard(profits, k) ;
        System.out.println("Maximum Profit = " + bb.maximumProfit()) ;
        System.out.println(bb) ;
    }
}

这是我到目前为止的课程:

public class Billboard {
    private int maximumprofit; // The max profit 
    private int finalcost; // The final cost of removing the billboards

    public Billboard(int[]profits, int k) {
        for (int i = 0; i < profits.length; i++) {
            maximumprofit+= profits[i];
        }
    }

    public int maximumProfit() {
        return maximumprofit;
    }
}

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您可能会有k+1个总计,并且您将每个新的利润元素添加到最低的当前总利润中,无论它是什么。所以在你的例子中,它确实是

  • 1, 2, 3
  • 1+1=2, 2, 3
  • 2+6=8, 2, 3
  • 8, 2+10=12, 3

最终数组

  • 8, 12, 3 - &gt;实际值3
  • 的最低值

如果这是你的意思(你从未说过k是什么),这段代码就可以完成这项工作。我在那里留下了一行调试代码,以帮助您检查是否正确。

public class Billboard
{
    private int[] profits;
    private int k;
    public Billboard(int[]profits, int k)
    {
        this.profits = profits;
        this.k = k+1; // I changed this to k+1 because you have 3 totals with k = 2
    }
    public int maximumProfit() {
        int[] bottom = new int[k];

        for(int i = 0; i < profits.length; i++) {
            int minIndex = 0;
            int min = Integer.MAX_VALUE;
            for (int j = 0; j < k; j++) {
                if (bottom[j] < min) {
                    minIndex = j;
                    min = bottom[j];
                }
            }
            bottom[minIndex] += profits[i];
        }

        int min = Integer.MAX_VALUE;
        for(int i = 0; i < k; i++) {
            System.out.println("TestDump: #"+i+" is: " + bottom[i]);
            if (bottom[i] < min) {
                min = bottom[i];
            }
        }

        return min;
    }

    public static void main(String args[]) {
        Billboard bb = new Billboard(new int[]{1,2,3,1,6,10}, 2);
        System.out.println("Maximum profit = " + bb.maximumProfit());
    }
}

此代码输出

TestDump: #0 is: 8
TestDump: #1 is: 12
TestDump: #2 is: 3
Maximum profit = 3

要更改将Billboard类放入System.out.println(bb)时输出的内容,您必须覆盖toString类的Billboard方法,即

@Override
public String toString() {
    return (new StringBuider(totalProfit - maxProfit)).toString();
}

假设您将类中的字段设置为先前具有正确的值。