对数组进行排序

时间:2019-06-05 08:30:05

标签: java arrays

给出一对数字对的列表,例如[(1,4),(2,5),(7、3),(4,6),(7,7)]。查找最长的子列表,该列表具有按第一个条目按升序排列,第二个按降序排列的对。对此任务的答案是[(2,5),(7,3)]。

我用两个字段创建了对象“ Pair”:“ first”和“ second”:

class Pair{
    int first;
    int second;
    public Pair(int first, int second) {
        this.first = first;
        this.second = second;
    }
}

接下来,我创建了一个'Pair'类型的数组,并用'Pair'对象填充了这些数组:

    Pair arrPair[] = new Pair[5];
    arrPair[0] = new Pair(1, 4);
    arrPair[1] = new Pair(2, 5);
    arrPair[2] = new Pair(7, 3);
    arrPair[3] = new Pair(4, 6);
    arrPair[4] = new Pair(7, 7);

据我所知,我应该编写一些循环来比较arrPair []的元素。但是我不知道这个循环应该如何工作和看起来,如何获得结果以及在哪里。

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

首先,您可以在Pair类中添加三个函数。 第一个应该是

isAscending() { 
   return this.first < this.second; 
}

第二个应该是

isDescending() {
   return this.first > this.second;
}

第三个应该是

range() {
   if(isAscending()) 
     return this.second - this.first;

   return this.first - this.second;
}

您可以创建两个变量,以托管升序对和降序对的最长子列表。然后,(1)您必须遍历数组(2)确定当前对是升序还是下降(3)确定该对是否长于先前的最大值。

示例(或多或少的伪代码):

myCurrentLongestAscending = new Pair(0,0);
myCurrentLongestDecending = new Pair(0,0);

for (Pair currentPair : myPairs){
  if( currentPair.isAscending() && currentPair.range() > myCurrentLongestAscending.range()){
       myCurrentLongestAscending = currentPair;

  else if( currentPair.isDescending() && currentPair.range() > myCurrentLongestDecending .range()) {
       myCurrentLongestDecending = currentPair;
  }
}

myResult = [myCurrentLongestAscending, myCurrentLongestDecending];