货拉拉面试题

题目:

AB两个数组,正int,不重复,且A是B的子集,求A的每个元素在B中的下一个比它大的值,如果没有则结果为-1
eg:A:(4, 2, 5, 1),B:(4, 2, 3, 5, 1),result:(5, 3, -1, -1)

scala求解:

def calculateHLL(a: List[Int], b: List[Int]): ListBuffer[Int] = {
    var indexB = -1
    val cntA = a.length
    val cntB = b.length
    val resultList = ListBuffer[Int]()

    for (i <- 0 until cntA) {
      // 计算i元素在B中的index
      for (j <- 0 until cntB) {
        if (a(i) == b(j)) {
          indexB = j
        }
      }
      // 从i元素在B的下一个索引开始,将下一个大于i的B元素写入resultList,没有大于i的B元素,则写入-1
      var resultTemp = -1
      for (n <- indexB+1 until cntB) {
        if (resultTemp.equals(-1) && b(n) > a(i)) {
          resultTemp = b(n)
        }
      }
      resultList.insert(i, resultTemp)
    }

    resultList
  }

测试结果:

@Test
  def HLL(): Unit = {
    /**
     * AB两个数组,正int,不重复,且A是B的子集,求A的每个元素在B中的下一个比它大的值,如果没有则结果为-1
     * eg:A:(4, 2, 5, 1),B:(4, 2, 3, 5, 1),result:(5, 3, -1, -1)
     */
    val listA = List(4, 2, 5, 1)
    val listB = List(4, 2, 3, 5, 1)
    val resultAB = calculateHLL(listA, listB)
    println(s"listA: ${listA}")
    println(s"listB: ${listB}")
    println(s"result: ${resultAB}")
  }
listA: List(4, 2, 5, 1)
listB: List(4, 2, 3, 5, 1)
result: ListBuffer(5, 3, -1, -1)

你可能感兴趣的:(货拉拉面试题)