알고리즘/문제

[LeetCode] - M - Rotate Array

Casteira 2023. 8. 25. 01:55

https://leetcode.com/problems/rotate-array/description/?envType=study-plan-v2&envId=top-interview-150

 

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

 

📌 - 처음 생각한 풀이

  1. 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();
       }
    
    }
}

 

 

📌- 풀이

  1.  역순으로 정렬
  2.  0번째 인덱스부터 (k - 1)번째 인덱스까지 역순으로 뒤집는다
  3.  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--;
        }
    }
}