提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
用scala实现旋转数组
代码如下:
先将数组最后一个值赋给一个临时变量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 //原始数组 : 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 } }