Leetcode Java Rotate Array
업데이트:
문제
코드
class Solution {
public void rotate(int[] nums, int k) {
k %= nums.length;
this.reverse(nums, 0, nums.length - 1);
this.reverse(nums, 0, k - 1);
this.reverse(nums, k, nums.length - 1);
}
private void reverse(int[] nums, int start, int end) {
while (start < end) {
int temp = nums[start];
nums[start++] = nums[end];
nums[end--] = temp;
}
}
}
결과
설명
-
주어진 배열인 nums를 k번 값을 뒤에 있는 값을 앞으로 오게 회전하는 문제이다.
- k에 nums.length로 나눈 나머지를 넣어준다.
- nums를 nums.length번 회전하면 같은 위치이므로, 횟수를 줄여준다.
- 세 번 배열의 값들을 반전시킴으로써 원하는 배열의 형태를 만들어준다.
- nums를 처음 값부터 마지막 값까지 반전시킨다.
- nums를 처음 값부터 $k - 1$ 번째 위치의 값까지 반전시킨다.
- nums를 k 번째 위치의 값부터 마지막 값까지 반전시킨다.
- 세 번의 반전을 통해서 k번 회전시킨 결과와 동일하게 된다.
- nums가 [1, 2, 3, 4, 5] & k가 3의 경우를 예를 든다.
- 기본 회전의 경우, [5, 1, 2, 3, 4] -> [4, 5, 1, 2, 3] -> [3, 4, 5, 1, 2]
- 위의 반전의 경우, [5, 4, 3, 2, 1] -> [3, 4, 5, 2, 1] -> [3, 4, 5, 1, 2]
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기