旋转数组Scala实现

it2025-02-17  3

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

 

文章目录

前言一、旋转数组是什么?二、具体实现 1.方法12.方法2

 


前言

用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)