旋转数组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
  }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值