LeetCode-in-Java

2610. Convert an Array Into a 2D Array With Conditions

Medium

You are given an integer array nums. You need to create a 2D array from nums satisfying the following conditions:

Return the resulting array. If there are multiple answers, return any of them.

Note that the 2D array can have a different number of elements on each row.

Example 1:

Input: nums = [1,3,4,1,2,3,1]

Output: [[1,3,4,2],[1,3],[1]]

Explanation: We can create a 2D array that contains the following rows: - 1,3,4,2 - 1,3 - 1 All elements of nums were used, and each row of the 2D array contains distinct integers, so it is a valid answer. It can be shown that we cannot have less than 3 rows in a valid array.

Example 2:

Input: nums = [1,2,3,4]

Output: [[4,3,2,1]]

Explanation: All elements of the array are distinct, so we can keep all of them in the first row of the 2D array.

Constraints:

Solution

import java.util.ArrayList;
import java.util.List;

public class Solution {
    public List<List<Integer>> findMatrix(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        int n = nums.length;
        int[] freq = new int[n + 1];
        for (int num : nums) {
            if (res.size() < ++freq[num]) {
                res.add(new ArrayList<>());
            }
            res.get(freq[num] - 1).add(num);
        }
        return res;
    }
}