Rotate Array - LeetCode
Can you solve this real interview question? Rotate Array - Given an integer array nums, rotate the array to the right by k steps, where k is non-negative. Example 1: Input: nums = [1,2,3,4,5,6,7], k = 3 Output: [5,6,7,1,2,3,4] Explanation: rotate 1 step
leetcode.com
📌 - 처음 생각한 풀이
- Deque를 사용해서 단순하게 풀었다.
시간적으로 굉장히 비효율 적인 구조였고, 개선하기 위해 찾아보았고 되게 재밌는 코드들이 많았다.
🔥 - Java 코드
import java.util.*;
class Solution {
public void rotate(int[] nums, int k) {
Deque<Integer> deque = new ArrayDeque();
for(int i : nums){
deque.addLast(i);
}
for(int i=0;i<k;i++){
deque.addFirst(deque.pollLast());
}
for(int i =0; i<nums.length;i++){
nums[i] = deque.poll();
}
}
}
📌- 풀이
- 역순으로 정렬
- 0번째 인덱스부터 (k - 1)번째 인덱스까지 역순으로 뒤집는다
- k번째 인덱스부터 끝까지 역순으로 뒤집는다.
🔥 - Java 코드
import java.util.*;
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);
}
private void reverse(int[] nums, int start, int end) {
while (start < end) {
int temp = nums[end];
nums[end] = nums[start];
nums[start] = temp;
start++;
end--;
}
}
}