列表

详情


2610. 转换二维数组

给你一个整数数组 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 中的所有元素都不同,所以我们可以将其全部保存在二维数组中的第一行。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<vector<int>> findMatrix(vector<int>& nums) { } };

golang 解法, 执行用时: 8 ms, 内存消耗: 3.3 MB, 提交时间: 2023-04-11 09:33:37

func findMatrix(nums []int) (ans [][]int) {
	cnt := map[int]int{}
	for _, x := range nums {
		cnt[x]++
	}
	for len(cnt) > 0 {
		row := []int{}
		for x := range cnt {
			row = append(row, x)
			if cnt[x]--; cnt[x] == 0 {
				delete(cnt, x)
			}
		}
		ans = append(ans, row)
	}
	return
}

java 解法, 执行用时: 4 ms, 内存消耗: 42.1 MB, 提交时间: 2023-04-11 09:33:23

class Solution {
    public List<List<Integer>> findMatrix(int[] nums) {
        var cnt = new HashMap<Integer, Integer>();
        for (int x : nums) cnt.merge(x, 1, Integer::sum);
        var ans = new ArrayList<List<Integer>>();
        while (!cnt.isEmpty()) {
            var row = new ArrayList<Integer>();
            for (var it = cnt.entrySet().iterator(); it.hasNext(); ) {
                var e = it.next();
                row.add(e.getKey());
                e.setValue(e.getValue() - 1);
                if (e.getValue() == 0)
                    it.remove();
            }
            ans.add(row);
        }
        return ans;
    }
}

python3 解法, 执行用时: 32 ms, 内存消耗: 15 MB, 提交时间: 2023-04-11 09:33:10

'''
用一个哈希表 cnt 记录每个元素的剩余次数。构造答案时,如果元素 x 的剩余次数为 0,
则将 x 从 cnt 中删除。
'''
class Solution:
    def findMatrix(self, nums: List[int]) -> List[List[int]]:
        ans = []
        cnt = Counter(nums)
        while cnt:
            ans.append(list(cnt))
            for x in ans[-1]:
                cnt[x] -= 1
                if cnt[x] == 0:
                    del cnt[x]
        return ans

上一题