comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
中等 |
1373 |
第 339 场周赛 Q2 |
|
给你一个整数数组 nums
。请你创建一个满足以下条件的二维数组:
- 二维数组应该 只 包含数组
nums
中的元素。 - 二维数组中的每一行都包含 不同 的整数。
- 二维数组的行数应尽可能 少 。
返回结果数组。如果存在多种答案,则返回其中任何一种。
请注意,二维数组的每一行上可以存在不同数量的元素。
示例 1:
输入:nums = [1,3,4,1,2,3,1] 输出:[[1,3,4,2],[1,3],[1]] 解释:根据题目要求可以创建包含以下几行元素的二维数组: - 1,3,4,2 - 1,3 - 1 nums 中的所有元素都有用到,并且每一行都由不同的整数组成,所以这是一个符合题目要求的答案。 可以证明无法创建少于三行且符合题目要求的二维数组。
示例 2:
输入:nums = [1,2,3,4] 输出:[[4,3,2,1]] 解释:nums 中的所有元素都不同,所以我们可以将其全部保存在二维数组中的第一行。
提示:
1 <= nums.length <= 200
1 <= nums[i] <= nums.length
我们先用数组或哈希表
然后遍历
最后返回答案列表即可。
时间复杂度
class Solution:
def findMatrix(self, nums: List[int]) -> List[List[int]]:
cnt = Counter(nums)
ans = []
for x, v in cnt.items():
for i in range(v):
if len(ans) <= i:
ans.append([])
ans[i].append(x)
return ans
class Solution {
public List<List<Integer>> findMatrix(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
int n = nums.length;
int[] cnt = new int[n + 1];
for (int x : nums) {
++cnt[x];
}
for (int x = 1; x <= n; ++x) {
int v = cnt[x];
for (int j = 0; j < v; ++j) {
if (ans.size() <= j) {
ans.add(new ArrayList<>());
}
ans.get(j).add(x);
}
}
return ans;
}
}
class Solution {
public:
vector<vector<int>> findMatrix(vector<int>& nums) {
vector<vector<int>> ans;
int n = nums.size();
vector<int> cnt(n + 1);
for (int& x : nums) {
++cnt[x];
}
for (int x = 1; x <= n; ++x) {
int v = cnt[x];
for (int j = 0; j < v; ++j) {
if (ans.size() <= j) {
ans.push_back({});
}
ans[j].push_back(x);
}
}
return ans;
}
};
func findMatrix(nums []int) (ans [][]int) {
n := len(nums)
cnt := make([]int, n+1)
for _, x := range nums {
cnt[x]++
}
for x, v := range cnt {
for j := 0; j < v; j++ {
if len(ans) <= j {
ans = append(ans, []int{})
}
ans[j] = append(ans[j], x)
}
}
return
}
function findMatrix(nums: number[]): number[][] {
const ans: number[][] = [];
const n = nums.length;
const cnt: number[] = new Array(n + 1).fill(0);
for (const x of nums) {
++cnt[x];
}
for (let x = 1; x <= n; ++x) {
for (let j = 0; j < cnt[x]; ++j) {
if (ans.length <= j) {
ans.push([]);
}
ans[j].push(x);
}
}
return ans;
}