【发布时间】:2018-06-14 15:16:40
【问题描述】:
我有一个颜色及其出现频率的 ArrayList。我的程序应该计算使两个相等的砖块之间的最小距离最大化的那些项目的重新排序。
例如,给定输入由 4*brick 1 (x)、3*brick 2 (y) 和 5*brick 3 (z) 组成,一个正确的输出应该是:z y x z x z y x z x y。
我的代码没有产生好的解决方案。特别是,有时最后有 2 个相等的砖块,这是最坏的情况。
import java.util.ArrayList;
import java.util.Collections;
public class Calc {
// private ArrayList<Wimpel> w = new ArrayList<Brick>();
private String bKette = "";
public String bestOrder(ArrayList<Brick> w) {
while (!w.isEmpty()) {
if (w.get(0).getFrequency() > 0) {
bChain += w.get(0).getColor() + "|";
Brick brick = new Wimpel(w.get(0).getVariant(), w.get(0).getFrequency() - 1);
w.remove(0);
w.add(brick);
// bestOrder(w);
} else {
w.remove(0);
}
bestOrder(w);
}
return bOrder;
}
public int Solutions(ArrayList<Wimpel> w) {
ArrayList<Brick> tmp = new ArrayList<Brick>(w);
int l = 1;
int counter = (int) w.stream().filter(c -> Collections.max(tmp).getFrequency() == c.getFrequency()).count();
l = (int) (fakultaet(counter) * fakultaet((tmp.size() - counter)));
return l;
}
public static long fakultaet(int n) {
return n == 0 ? 1 : n * fakultaet(n - 1);
}
}
如何让我的代码选择最优顺序?
【问题讨论】:
-
我添加了动态编程标签,因为我认为它与您的问题有关。
-
我删除了 [sorting] 标签,因为问题与排序无关。
-
实现
Comparable接口然后使用Collections.sort()怎么样? -
绝对不是,@vatbub。将两个相等的项目与任何不相等的项目分开的项目排列都不是排序顺序。这不是排序问题。
-
首先,您需要明确定义最佳顺序的“分数”:它是所有类型的相同类型之间最小距离的总和吗? (越高越好)