-
🎵 189. Rotate Array javaLeetCode_Study_Plan/Algorithm 2022. 12. 20. 22:42
https://leetcode.com/problems/rotate-array/
# 첫 시도 (배열->배열 복사 실패)
class Solution { public void rotate(int[] nums, int k) { for (int i = 0; i < k; i++) { int lastNum = nums[nums.length-1]; int[] ans = new int[nums.length]; ans[0] = lastNum; for (int j = 1; j <nums.length; j++) { ans[j] = nums[j-1]; } nums = ans; System.out.println(Arrays.toString(ans)); } } }
but, 이렇게 하니 ans 배열은 의도한 대로 잘 실행되지만,
nums 배열 값에 ans값이 들어가진 않았다.
# 두 번째 시도 (새롭게 배열 값 재할당)
class Solution { public void rotate(int[] nums, int k) { for (int i = 0; i < k; i++) { int lastNum = nums[nums.length-1]; int[] ans = new int[nums.length]; ans[0] = lastNum; for (int j = 1; j <nums.length; j++) { ans[j] = nums[j-1]; } for (int idx = 0; idx <nums.length; idx++) { nums[idx] = ans[idx]; } } } }
Time Limit Exceeded
# 최종 시도
public class Solution { public void rotate(int[] nums, int k) { if (nums == null || nums.length == 0) { return; } int[] a = new int[nums.length]; for (int i = 0; i < nums.length; i++) { a[(i + k) % nums.length] = nums[i]; } for (int i = 0; i < nums.length; i++) { nums[i] = a[i]; } } }
다시 말해, rotate가 갖는 본질은 start 포인트가 k만큼 밀린다는건데 그 밀리는 범위는
배열 사이즈인 nums.length이므로 %로서 인덱싱을 해주면 되는 문제!
'LeetCode_Study_Plan > Algorithm' 카테고리의 다른 글
167. Two Sum II - Input Array Is Sorted java (0) 2022.12.20 283. Move Zeroes java (0) 2022.12.20 977. Squares of a Sorted Array java (0) 2022.12.20 35. Search Insert Position java (0) 2022.12.20 278. First Bad Version java (0) 2022.12.20