【发布时间】:2021-07-23 16:37:04
【问题描述】:
我正在尝试使用数组反转方法从特定位置旋转数组。
输入数组:[1,2,3,4,5,6,7] d = 3 输出数组:[5,6,7,1,2,3,4]
为了实现这一点,我想分三个步骤处理数组。 Step1:从起始位置反转数组,直到 d => [4,3,2,1,5,6,7] Step2:将数组从d反转到数组末尾=> [4,3,2,1,7,6,5] Step3:从 Step2 反转完整数组 => [5,6,7,1,2,3,4]
我没有遵循任何函数式编程模式,因为我想逐步检查算法。
val arr = Array[Int](1, 2, 3, 4, 5, 6, 7)
def reverseAlgo(brr: Array[Int], start: Int, end: Int): Unit = {
var temp = 0
for(i <- start until end/2) {
temp = brr(i)
brr(i) = brr(end-i-1)
brr(end-i-1) = temp
}
brr.foreach(println)
}
Step1 工作正常:
reverseAlgo(arr, 0, 3)
输出:
3
2
1
4
5
6
7
但是 Step2 没有产生所需的输出:
reverseAlgo(arr, 3, 7)
输出:
3
2
1
4
5
6
7
如你所见,数组的输出应该是:3,2,1,7,6,5,4 由于Step2的输出不正确,所以最终的输出也是错误的。
第三步:
reverseAlgo(arr, 0, arr.length)
输出:
7
6
5
4
1
2
3
谁能告诉我我在这里做错了什么?
【问题讨论】: