How to find the shortest identical consecutive subarray in an array with Scala

1 Answer

0 votes
object ShortestRunProgram {

  def shortest_identical_consecutive_subarray(arr: Array[Int]): Array[Int] = {
    if (arr.isEmpty) return Array.empty[Int]

    var bestStart = 0
    var bestLen   = arr.length

    var currentStart = 0
    var currentLen   = 1

    for (i <- 1 until arr.length) {
      if (arr(i) == arr(i - 1)) {
        currentLen += 1
      } else {
        if (currentLen < bestLen) {
          bestLen = currentLen
          bestStart = currentStart
        }
        currentStart = i
        currentLen = 1
      }
    }

    if (currentLen < bestLen) {
      bestLen = currentLen
      bestStart = currentStart
    }

    arr.slice(bestStart, bestStart + bestLen)
  }

  // ------------------------------------------------------------
  // MAIN PROGRAM
  // ------------------------------------------------------------
  def main(args: Array[String]): Unit = {
    val arr = Array(
      3,3,3,
      7,7,7,7,7,
      2,2,
      5,5,5,5,
      9,9,9,9,9,9
    )

    val resultArr = shortest_identical_consecutive_subarray(arr)

    print("Array result: ")
    resultArr.foreach(x => print(s"$x "))
  }
}

  
  
  
/*
run:
  
Array result: 2 2 
  
*/

 

 



answered Feb 9 by avibootz

Related questions

...