一个数组A中存有 n 个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 M( M >=0)个位置,即将A中的数据由(A0 A1 ……AN-1 )变换为(AN-M …… AN-1 A0 A1 ……AN-M-1 )(最后 M 个数循环移至最前面的 M 个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
数据范围:
,
进阶:空间复杂度
,时间复杂度
6,2,[1,2,3,4,5,6]
[5,6,1,2,3,4]
4,0,[1,2,3,4]
[1,2,3,4]
(1<=N<=100,M>=0)
def solve(self , n: int, m: int, a: List[int]) -> List[int]: # write code here # m对n取余 x就是最小的移动数了 x = m % n return a[n-x:n] + a[0:n-x]
class Solution: def solve(self , n: int, m: int, a: List[int]) -> List[int]: # write code here if n == 0: return a # 区间[0, 3) def reverse(arr, begin, end): left = begin right = end - 1 while left < right: arr[left], arr[right] = arr[right], arr[left] left += 1 right -= 1 # 操作是周期的 m = m % n # 全部翻转: reverse(a, 0, len(a)) # 翻转前面部分: reverse(a, 0, m) # 翻转后面的部分: reverse(a, m, len(a)) return a
class Solution: def solve(self , n: int, m: int, a: List[int]) -> List[int]: # write code here for i in range(m): a.insert(0,a[-1]) a.pop() return a我觉得这样写也挺简单的啊
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # 旋转数组 # @param n int整型 数组长度 # @param m int整型 右移距离 # @param a int整型一维数组 给定数组 # @return int整型一维数组 # class Solution: def solve(self , n: int, m: int, a: List[int]) -> List[int]: # write code here if n==1: return a if m==0: return a elif m>n: m=m%n for i in range(m): x =a.pop() a.insert(0,x) return a
class Solution: def solve(self , n: int, m: int, a: List[int]) -> List[int]: list_a = [] res = [] if m >= n: m = m % n for i in range(m): list_a.insert(0,a[-1]) a.pop() res = list_a + a return res # write code here
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # 旋转数组 # @param n int整型 数组长度 # @param m int整型 右移距离 # @param a int整型一维数组 给定数组 # @return int整型一维数组 # class Solution: def solve(self , n: int, m: int, a: List[int]) -> List[int]: m = m % n if m < n/2: for i in range(m): x = a.pop() a.insert(0, x) else: for i in range(n-m): x = a.pop(0) a.append(x) return a