我是Java的新手,我创建了以下列表:
List<List<Double>> Sums= new ArrayList<List<Double>>();
我想知道元素的索引(和列表)。
不幸的是,元素是可变的,它取决于我首先给出的方法参数。 例如:
public List<Integer> method(int parameter){...}
如果参数等于0,则搜索到的元素应为ALL列表的最大值。
如果参数等于1,则搜索到的元素应该是ALL列表的第二大值。
如果参数等于&#34; n&#34;,搜索到的元素应该是ALL列表的最大值(n + 1)。
I have also visualized the problem
我非常感谢任何与我分享他的想法的人! 谢谢!
答案 0 :(得分:0)
取消JB Nizet的建议,您可以创建一个包装器对象来保存数据的数据和索引。
class Element implements Comparable<Element> {
private int data;
int innerIndex, outerIndex;
public Element(int data, int innerIndex, int outerIndex) {
this.data = data;
this.innerIndex = innerIndex;
this.outerIndex = outerIndex;
}
public int getData() {
return data;
}
public List<Integer> getIndicies() {
return Arrays.asList(outerIndex+1, innerIndex+1);
}
@Override
public int compareTo(Element o) {
// negate to sort descending
return -1*Integer.compare(this.data, o.data);
}
}
然后,您可以迭代数据并将其展平为这些元素的单个列表。此方法接受列表列表,展平它,根据元素数据值对其进行排序,并返回第n个最大元素。
public Element getNthMax(List<List<Integer>> sums, int n) {
List<Element> flatList = new ArrayList<Element>();
for (int i = 0; i < sums.size(); i++) {
List<Integer> innerList = sums.get(i);
for (int j = 0; j < innerList.size(); j++) {
Element e = new Element(innerList.get(j), j, i);
flatList.add(e);
}
}
Collections.sort(flatList);
return flatList.get(n);
}
如果我们要关注您的示例,我们会创建您的数据列表并使用它调用此方法。
List<List<Integer>> sums = new ArrayList<List<Integer>>();
sums.add(Arrays.asList(1, 3, 6));
sums.add(Arrays.asList(4, 3, 8, 1));
sums.add(Arrays.asList(1, 3));
Element max = getNthMax(sums, 0);
Element secondMax = getNthMax(sums, 1);
System.out.println(max.getIndicies()); // [2, 3]
System.out.println(secondMax.getIndicies()); // [1, 3]