class Solution {
public void rotate(int[] nums, int k) {
int before = nums[0];
int nextLoc = 0;
int i = 0; //counter
int l = nums.length;
while (i < l) {
int loc = nextLoc + k;
if (loc >= l) {
loc = loc - l;
}
int temp = nums[loc];
nums[loc] = before;
before = temp;
nextLoc = loc;
i++;
}
}
}
아놔 빡쳐..
다시 돌아왔을때 숫자가 겹칠수도 있다는 점ㅠㅠ
Space를 O(n)으로 하면 쉬웠을텐데
O(1)로 하려니깐 빡쎄네요 ㅠㅠ
class Solution {
public void rotate(int[] nums, int k) {
k = k % nums.length;
int count = 0;
for (int start = 0; count < nums.length; start++) {
int current = start;
int prev = nums[start];
do {
int next = (current + k) % nums.length;
int temp = nums[next];
nums[next] = prev;
prev = temp;
current = next;
count++;
} while (start != current);
}
}
}
내가 생각한게 대충 이런건데 이건 겹칠때 서로 나눠줌
Runtime: 0 ms, faster than 100.00% of Java online submissions for Rotate Array.
Memory Usage: 39.7 MB, less than 32.06% of Java online submissions for Rotate Array.
근데 거의 다 rotate 써서 푼듯
class Solution {
public void rotate(int[] nums, int k) {
k %= nums.length;
reverse(nums, 0, nums.length - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, nums.length - 1);
}
public void reverse(int[] nums, int start, int end) {
while (start < end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}
}
Runtime: 0 ms, faster than 100.00% of Java online submissions for Rotate Array.
Memory Usage: 39.5 MB, less than 70.61% of Java online submissions for Rotate Array.