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