Algorithm/LeetCode

[LeetCode] Shuffle the Array

Given the array nums consisting of 2n elements in the form [x1,x2,...,xn,y1,y2,...,yn].

Return the array in the form [x1,y1,x2,y2,...,xn,yn].


Time Complexity -> step
어떻게 step을 줄일 수 있을까?       

직관적으로 떠오르는 것은

int[]을 두 개 만들어서 옮겨 담고
다시 합친것을 return하는것
O(N) + O(N) O(2N) => O(N)

 

변수를 하나 더 둬서 n번에 해결했다.

 

Memory Complexity

class Solution {
    public int[] shuffle(int[] nums, int n) {
       
        int[] result = new int[n*2];
        
        int i = 0;
        for(int idx = 0; idx < n; idx++) {
            result[i++] = nums[idx];
            result[i++] = nums[n+idx];
        }
        
        return result;
    }
}

Runtime: 0 ms, faster than 100.00% of Java online submissions for Shuffle the Array.
Memory Usage: 39.1 MB, less than 62.77% of Java online submissions for Shuffle the Array.

다른 사람 코드

class Solution {
    public int[] shuffle(int[] nums, int n) {
        int[] output = new int[nums.length];
        short x =0;
        short y =1;
        for(int i=0;i<n;i++){  
           output[x] = nums[i];
           x +=2;
           output[y] = nums[n+i];
           y+=2;
        }
        System.gc();
        return output;
        
    }
}

Runtime: 1 ms, faster than 16.91% of Java online submissions for Shuffle the Array.
Memory Usage: 38.2 MB, less than 99.84% of Java online submissions for Shuffle the Array.

 

short과 System.gc를 사용했다.

System.gc를 쓰지 말라고하는데 수동으로 가비지 컬렉터를 돌리는 것

즉 사용하지 않고 점유하고 있는 메모리를 지워주는 기능이다.

이때 쓰레드가 멈춰버리기 때문에 사용하지 말라고한다.