旋转数组Scala实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

用scala实现旋转数组


一、旋转数组是什么?

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]

二、具体实现

1.方法1

代码如下:

先将数组最后一个值赋给一个临时变量tmp

在从倒数第二个元素开始遍历,将当前的元素的值赋给下一个元素

最后将tmp的值赋值给第一个元素

将此操作进行几次就是往右旋转几步

def rotate1(nums: Array[Int], k: Int): Unit = {
  val len=nums.length-1
  for (_ <- 1 to k%nums.length){//向右旋转几步
    val tmp=nums(len)
    for (ind <- (0 to len-1).reverse)
      nums(ind+1)=nums(ind)
    nums(0)=tmp
  }
}

2.方法2

代码如下:

//方法2
//原始数组                  : 1 2 3 4 5 6 7
//反转所有数字后             : 7 6 5 4 3 2 1
//反转前 k 个数字后          : 5 6 7 4 3 2 1
//反转后 n-k 个数字后        : 5 6 7 1 2 3 4 --> 结果
def rotate2(nums: Array[Int], k: Int): Unit = {
  val len=nums.length
  reverseInt(nums, 0, len - 1);
  reverseInt(nums, 0, k%len - 1);
  reverseInt(nums, k%len, len - 1);
}

//对索引从start1到end1的数据进行翻转
def reverseInt(s: Array[Int],start1:Int,end1:Int): Unit = {
  var start=start1
  var end=end1
  while (start<end){
    var tmp=s(start)
    s(start)=s(end)
    s(end)=tmp
    start+=1
    end-=1
  }
}

 

猜你喜欢

转载自blog.csdn.net/qq_42456324/article/details/109208534