Deepak
Deepak

Reputation: 361

Getting maximum value in remaining sub-list for each element in a list

val input = List(16, 17, 4, 5, 3, 0)

We have to sort in a way where starting from the first element we need to return the maximum element in the remaining list.

I want output like 17,5,5,3,0.

I've Tried Below code

val v1 = input.scanRight(Int.MinValue)(math.max).dropRight(1)
println("variation 1, with scan")
println(v1)

Upvotes: 0

Views: 426

Answers (2)

Leo C
Leo C

Reputation: 22449

If I understand your requirement correctly, you could use foldRight to traverse the list from right to left, and at each iteration store the maximum value of the traversed elements in the accumulator, which is a Tuple of (List[Int], Int):

val input = List(16, 17, 4, 5, 3, 0)

input.foldRight((List[Int](), Int.MinValue)){ case (i, (ls, j)) =>
  val m = i max j
  (m :: ls, m)
}._1
// res1: List[Int] = List(17, 17, 5, 5, 3, 0)

Upvotes: 2

Deepak
Deepak

Reputation: 361

Reversing will work in above case

 var max = Int.MinValue
      val buffer = new scala.collection.mutable.ArrayBuffer[Int](input.length)
      for (i <- input.reverse if i >= max) {
        max = i
        i +=: buffer
      }

    println(buffer.toList)

Upvotes: 1

Related Questions