题目:
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)