牛客网: BM97
题目: 数组右移M位
思路: 数组切分为两部分,右边M位首尾交换,左边N-M位首尾交换,全部数组首尾交换。
注意: M需要取余数,以使M大于N时结果仍正确
代码:文章来源:https://uudwc.com/A/jr3zj
// go
package main
// import "fmt"
// import "fmt"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 旋转数组
* @param n int整型 数组长度
* @param m int整型 右移距离
* @param a int整型一维数组 给定数组
* @return int整型一维数组
*/
func solve( n int , m int , a []int ) []int {
// write code here
m = m % n
if m == 0 {
return a
}
mid := n - m
left, right := 0, mid - 1
for left < right {
a[left], a[right] = a[right], a[left]
left++
right--
}
left, right = mid, n-1
for left < right {
a[left], a[right] = a[right], a[left]
left++
right--
}
left, right = 0, n - 1
for left < right {
a[left], a[right] = a[right], a[left]
left++
right--
}
return a
}
文章来源地址https://uudwc.com/A/jr3zj