我很难理解Scala数组中的循环遍历。在scala中遍历两个数组
我有两个数组,并希望用两个指针遍历它们。一个指针从第一个数组的开始处开始。第二个指针从第二个数组的末尾开始。 我想在两个指针处的元素满足条件时从循环中断开。一次,我移动任何循环的一个指针。有人能帮助我如何解决这些问题。
我米试图在这里解决问题:http://www.geeksforgeeks.org/given-an-array-arr-find-the-maximum-j-i-such-that-arrj-arri/
鉴于阵列ARR [],找到最大的J - 我使得ARR [J]> ARR [I]
为了解决这个问题,我们需要得到arr []的两个最优索引:左指数i和右指数j。
1)对于一个元素arr [i],如果在arr [i]左边有一个小于arr [i]的元素,我们不需要考虑左边索引的arr [i]。 2)类似地,如果在arr [j]右侧存在更大的元素,那么我们不需要将这个j考虑为正确的索引。因此,我们构造两个辅助数组LMin []和RMax [],使得LMin [i]包含arr [i]左边的最小元素,包括arr [i],并且RMax [j]包含arr [j]右侧的最大元素,包括arr [j]。在构造这两个辅助数组之后,我们从左到右遍历这两个数组。 4)当我们发现LMin [i]大于RMax [j]时,如果遍历LMin []和RMa [],那么我们必须在LMin [](或者i ++)中继续前进,因为左侧的所有元素的LMin [i]大于或等于LMin [i]。否则,我们必须继续在RMax [j]中寻找更大的j-i值。
val list =List(34, 8, 10, 3, 2, 80, 30, 33, 1)
// Get all the minimum elements on left side for each index
val minElementWithLeftIndexes = list.zipWithIndex.foldLeft(List((list(0), 0)), (list(0), 0))((l,r) => if(l._2._1 >= r._1) (l._1 :+r, r) else (l._1:+l._2, l._2))._1.drop(1)
val maxElementWithRightIndexes = list.zipWithIndex.foldRight(List((list.last, list.length-1)), (list.last, list.length-1))((r,l) => if(l._2._1 <= r._1) (l._1 :+ r, r) else (l._1:+l._2, l._2))._1.drop(1)
println(minElementWithLeftIndexes)
println(maxElementWithRightIndexes)
//Step 4 : traverse on two lists to get the max value
不能用scala做第4步。
显示一些代码。你必须至少尝试过一些东西。给这里的人一个起点,提供反馈意见。仅仅说你不能做第4步,展示你试图做的事情,你想做什么以及差距在哪里。 – cmbaxter 2015-04-03 18:22:01