我会尝试更好地解释它。
所以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;
}
}
答案 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();
}
假设您将类中的字段设置为先前具有正确的值。