数组中最大元素的索引

5 arrays for-loop scala

有谁知道如何从这个函数获取最大元素的索引:

编程语言是scala

def indexOfLargestElement(arr: Array[Int]): Int = 
Run Code Online (Sandbox Code Playgroud)

例如:

indexOfLargestElement(Array( 1, -6, 4, 5, 2, -1) ) == 3
Run Code Online (Sandbox Code Playgroud)

我不明白 - .-

谢谢你的帮助!

Ale*_*ula 10

以下是使用单次遍历的方法:

def indexOfLargest(array: Seq[Int]): Int = {
    val result = array.foldLeft(-1,Int.MinValue,0) {
        case ((maxIndex, maxValue, currentIndex), currentValue) =>
            if(currentValue > maxValue) (currentIndex,currentValue,currentIndex+1)
            else (maxIndex,maxValue,currentIndex+1)
        }
    result._1
}
Run Code Online (Sandbox Code Playgroud)

这将使用元组(已知最大元素的索引;最大元素的值; curent索引)来保存循环中的数据.


bar*_*sef 6

val l =数组(1,-6,4,5,2,-1)

l.indexOf(l.max)

  • 请注意,这将需要在阵列上进行**两次**遍历 (5认同)
  • 最多两次遍历。一旦找到该元素,第二次遍历便会退出。 (2认同)

And*_*yuk 5

scala> :paste
// Entering paste mode (ctrl-D to finish)

@annotation.tailrec final def indexOfLargestElement(a: Array[Int], i: Int = -1, mi: Int = -1, ma: Int = Int.MinValue): Int = {
  val i1 = i + 1
  if (i1 < a.length) {
    val ai1 = a(i1)
    if (ai1 >= ma) indexOfLargestElement(a, i1, i1, ai1)
    else indexOfLargestElement(a, i1, mi, ma)
  } else mi
}

// Exiting paste mode, now interpreting.

indexOfLargestElement: (a: Array[Int], i: Int, mi: Int, ma: Int)Int

scala> indexOfLargestElement(Array(1, -6, 4, 5, 2, -1))
res0: Int = 3

scala> indexOfLargestElement(Array())
res1: Int = -1

scala> indexOfLargestElement(Array(Int.MinValue))
res2: Int = 0
Run Code Online (Sandbox Code Playgroud)

  • 为什么所有的投票?这是一个正确的解决方案(也非常快,但不是最简单的理解). (3认同)