跳到主要内容

2610.转换二维数组

链接:2610.转换二维数组
难度:Medium
标签:数组、哈希表
简介:给你一个整数数组 nums 。请你创建一个满足以下条件的二维数组。

题解 1 - 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;
}
};

题解 2 - 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

题解 3 - 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
}
}