【问题标题】:How do I sort these values while retaining initial index?如何在保留初始索引的同时对这些值进行排序?
【发布时间】:2012-09-18 18:52:29
【问题描述】:

我想在剧院里安排 4 人一组,让他们坐成一排,或者让最多的人并排。我有一个行数组,其中索引表示存储该行中有多少可用座位的行。如果我使用排序方法,那么它将对可用座位进行排序,但我会丢失它对应的行。显然,我可以遍历它寻找我想要的最大座位数量,如果我没有找到,我可以减少我的数量等等,但这不是最佳的。

行:1 2 3 4

可用:2 3 1 4

可用排序:4 3 2 1

对应行:4 2 1 3

//this is one way to do it but i want a better way
int[] row = {0, 2, 3, 1, 4};
double[] rowDouble = new double[row.length];

for (int i = 0; i < row.length; i++)
{
    String rowString = Integer.toString(row[i]) + "." + Integer.toString(i);
    rowDouble[i] = Double.valueOf(rowString);
}

Arrays.sort(rowDouble);
String sortedRowString = Arrays.toString(rowDouble);
sortedRowString = sortedRowString.substring(1, sortedRowString.length()-1);

System.out.println(sortedRowString);
String[] finalSortedRowString = sortedRowString.split(", ");

for (int i = finalSortedRowString.length-1; i > 0; i--)
{
    System.out.println(finalSortedRowString[i].split("\\.")[1]);
}

【问题讨论】:

  • 你能再解释一下吗?您如何获得相应的行答案?
  • 只有4个人可以坐吗?输入 - 行、可用和排序可用 - 在有 4 个人的情况下没有意义。反正对我来说不是。
  • 行保存可用值。因此,当我从行 [1] 之类的行中调用 1 时,我得到 2。我需要知道哪一行具有最多的可用值。所以我需要对可用值进行排序,但要跟踪它对应的行。

标签: java c++ c arrays sorting


【解决方案1】:

我认为您使用错误的范例来解决这个问题。 Java 是一种面向对象的语言,您应该这样使用它。

public Class Row {
    private int available;
    private int rownum;
    public Row(int avail, int rown) { /*...*/ }
    public int compareTo(Row otherRow) { /*...*/ }
    public int checkAvailable() { /*...*/ }
    public int addPerson() { /*...*/ }
    public int addSeat() { /*...*/ }
    public int addParty(int size) { /*...*/ }
}

然后,您可以使用众多可用的 Java 集合之一来按您喜欢的方式保存和排序它们。这是一些额外的编码,但它将允许更健壮和可扩展的实现。例如:如果您的行有两个座位可用,但它们在两端怎么办?您当前的实现必须完全清除。在这里,您只需要更改几个地方的逻辑,然后 BAM,您就有了 v2。

请强烈​​考虑使用对您有利的语言。不要将 java 用作脚本语言,这不是它的用途。

【讨论】:

  • 我在我的实际程序中使用了这种方法,即个人和团体座位的单独方法。我将行保存在 ArrayList 的 ArrayList 中,其中包含 row# 和座位对象。所以我需要按降序排列我的座位对象大小。
猜你喜欢
  • 2019-10-19
  • 2011-11-04
  • 2017-07-12
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多