问题背景
给你一个整数数组 n u m s nums nums。请你创建一个满足以下条件的二维数组:
- 二维数组应该 只 包含数组 n u m s nums nums 中的元素。
- 二维数组中的每一行都包含 不同 的整数。
- 二维数组的行数应尽可能 少 。
返回结果数组。如果存在多种答案,则返回其中任何一种。
请注意,二维数组的每一行上可以存在不同数量的元素。
数据约束
- 1 ≤ n u m s . l e n g t h ≤ 200 1 \le nums.length \le 200 1≤nums.length≤200
- 1 ≤ n u m s [ i ] ≤ n u m s . l e n g t h 1 \le nums[i] \le nums.length 1≤nums[i]≤nums.length
解题过程
用哈希表统计各个数字出现的次数,最后构造答案即可。
答案的结构是嵌套的列表,有 API 的帮助可以在一个循环中完成所有操作,但是性能提升微乎其微,就不专门记录了。
具体实现
java
class Solution {
public List<List<Integer>> findMatrix(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
int[] count = new int[210];
int length = 0;
for (int num : nums) {
length = Math.max(length, ++count[num]);
}
while (length-- > 0) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < count.length; i++) {
if (count[i] > 0) {
list.add(i);
count[i]--;
}
}
res.add(list);
}
return res;
}
}