当前位置: 首页 > news >正文

lecode 2610. 转换二维数组-medium

1 题目:转换二维数组

官方标定难度:中

给你一个整数数组 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

2 solution

这道题相对比较简单,只需要统计每个数字出现的次数,然后每次将剩余的数字放入新的行,不重复即可。直到没有数字为止。
其实可以稍微优化一下,但是数据量不大,感觉没太必要。

代码

class Solution {
public:
vector<vector<int>> findMatrix(vector<int> &nums) {
    vector<int> cnt(nums.size() + 1, 0);
    for (int i: nums) cnt[i]++;
    
    auto p = max_element(cnt.begin(), cnt.end());

    vector<vector<int>> result;
    
    while (*p) {
        vector<int> row;
        for (int j = 1; j <= nums.size(); j++) {
            if (cnt[j] > 0) {
                row.push_back(j);
                cnt[j]--;
            }
        }
        result.push_back(row);
    }
    return result;
}
};

结果

在这里插入图片描述

相关文章:

  • 2025-03-21 Unity 序列化 —— 自定义2进制序列化
  • 初识XXL-JOB分布式任务调度
  • Scrapy 入门教程
  • WPF Reactive 数据绑定
  • 云服务器实现msf攻击
  • 【前端】Visual Studio Code安装配置教程:下载、汉化、常用组件、基本操作
  • 建造者模式 (Builder Pattern)
  • 深度学习--概率
  • 【第2月 - day6】NumPy 基础知识讲解
  • 最大异或对 The XOR Largest Pair
  • CSS 学习笔记 - 蓝桥杯重点整理
  • golang Error的一些坑
  • 解决Centos使用yum命令报错“Cannot find a valid baseurl for repo: base/7/x86_64”问题
  • c++(红黑树以及封装)
  • tradingview 2022版和2024版本的jsapi对接。
  • Java定时任务的三重境界:从单机心跳到分布式协调
  • UNIX网络编程笔记:基本TCP套接字编程
  • CSS平面转换
  • 万用表测MOS好坏
  • Java EE(13)——网络编程——UDP/TCP回显服务器
  • 牟海松任国家信访局副局长
  • 马上评丨未成年人“擦边”短视频岂能成流量密码
  • 城事 | 重庆新增热门打卡地标,首座熊猫主题轨交站亮相
  • 跨越时空的“精神返乡”,叶灵凤藏书票捐赠上海文学馆
  • 苏东坡:人生就是哈哈哈哈哈
  • “一节课、两小时”,体育正在回归“C位”