我正在尝试使用数组反转方法从特定位置旋转数组。
输入数组: 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的输出是不正确的,所以最终的输出也是错误的。
Step3:
reverseAlgo(arr, 0, arr.length)输出:
7
6
5
4
1
2
3谁能让我知道我在这里做的错误是什么?
发布于 2021-07-24 01:36:18
只有当范围从零开始时,您的代码才能工作。
for(i <- start until end/2) {
  temp = brr(i)
  brr(i) = brr(end-i-1)
  brr(end-i-1) = temp
}应该是这样的:
for(i <- 0 until (end-start)/2) {
  temp = brr(start+i)
  brr(start+i) = brr(end-i-1)
  brr(end-i-1) = temp
}有了这个改变,你的代码就可以工作了。
https://stackoverflow.com/questions/68502473
复制相似问题