2610.转换二维数组
链接:2610.转换二维数组
难度:Medium
标签:数组、哈希表
简介:给你一个整数数组 nums 。请你创建一个满足以下条件的二维数组。
题解 1 - python
- 编辑时间:2023-04-02
- 执行用时:48ms
- 内存消耗:15MB
- 编程语言:python
- 解法介绍:同上。
class Solution:
    def findMatrix(self, nums: List[int]) -> List[List[int]]:
        m = Counter()
        for num in nums:
            m[num] += 1
        res = []
        while True:
            f = False
            items = []
            for k, v in m.items():
                if v == 0:
                    continue
                m[k] -= 1
                items.append(k)
                f = True
            if not f:
                break
            res.append(items)
        return res
题解 2 - rust
- 编辑时间:2023-04-02
- 内存消耗:2.1MB
- 编程语言:rust
- 解法介绍:同上。
impl Solution {
    pub fn find_matrix(nums: Vec<i32>) -> Vec<Vec<i32>> {
        let mut m = std::collections::HashMap::<i32, i32>::new();
        for num in nums {
            *m.entry(num).or_insert(0) += 1;
        }
        let mut res = vec![];
        loop {
            let mut f = false;
            let mut items = vec![];
            for (k, v) in m.iter_mut() {
                if *v == 0 {
                    continue;
                }
                *v -= 1;
                items.push(*k);
                f = true;
            }
            if !f {
                break;
            }
            res.push(items);
        }
        res
    }
}
题解 3 - cpp
- 编辑时间:2023-04-02
- 执行用时:12ms
- 内存消耗:29.2MB
- 编程语言:cpp
- 解法介绍:哈希存储。
class Solution {
   public:
    vector<vector<int>> findMatrix(vector<int> &nums) {
        unordered_map<int, int> m;
        for (auto &num : nums) m[num]++;
        vector<vector<int>> res;
        while (1) {
            bool f = false;
            vector<int> items;
            for (auto &item : m) {
                if (item.second == 0) continue;                
                item.second--;
                items.push_back(item.first);
                f = true;
            }
            if (!f) break;
            res.push_back(items);
        }
        return res;
    }
};