今日中等题:https://leetcode-cn.com/problems/rotate-array/
哈哈开始还疑惑,这么简单的题怎么可能是中等,咔咔一顿操作提交完,才发现自己没认真看要求,O(1)空间复杂度,我这种新开辟数组空间的就妥妥地不满足了。
难怪题目开始就是void类型,导致我做了两次遍历,第一次把新数组组装好,第二次把数值替换进旧数组。
参考了题解,思路就是做3次翻转,比如nums= [1,2,3,4,5,6,7], k=3:
- 把[1,2,3,4,5,6,7]头尾交换,变成[7,6,5,4,3,2,1]
- 把前3位做头尾交换,变成[5,6,7,4,3,2,1]
- 把后4位做头尾交换,变成[5,6,7,1,2,3,4]
看下我稀碎的答案:
class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
int[] ans = new int[n];
for (int i=0;i<n;i++){
int m = (i+k) % n;
ans[m] = nums[i];
}
for (int j=0;j<n;j++){
nums[j]=ans[j];
}
}
}