189. Rotate Array

JJ·2021년 1월 19일
0

Algorithms

목록 보기
70/114
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.

0개의 댓글