今日中等題:https://leetcode-cn.com/problems/rotate-array/
哈哈開始還疑惑,這么簡單的題怎么可能是中等萤彩,咔咔一頓操作提交完象泵,才發(fā)現(xiàn)自己沒認(rèn)真看要求糖赔,O(1)空間復(fù)雜度,我這種新開辟數(shù)組空間的就妥妥地不滿足了胧辽。
難怪題目開始就是void類型鹿鳖,導(dǎo)致我做了兩次遍歷,第一次把新數(shù)組組裝好疙挺,第二次把數(shù)值替換進(jìn)舊數(shù)組。
參考了題解怜浅,思路就是做3次翻轉(zhuǎn)铐然,比如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];
}
}
}