排序题目:对角线遍历 II

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:对角线遍历 II

出处:1424. 对角线遍历 II

难度

6 级

题目描述

要求

给定一个二维整数数组 nums \texttt{nums} nums,将 nums \texttt{nums} nums 中的所有元素按照如下图所示的对角线顺序返回。

示例

示例 1:

示例 1

输入: nums = [[1,2,3],[4,5,6],[7,8,9]] \texttt{nums = [[1,2,3],[4,5,6],[7,8,9]]} nums = [[1,2,3],[4,5,6],[7,8,9]]
输出: [1,4,2,7,5,3,8,6,9] \texttt{[1,4,2,7,5,3,8,6,9]} [1,4,2,7,5,3,8,6,9]

示例 2:

示例 2

输入: nums = [[1,2,3,4,5],[6,7],[8],[9,10,11],[12,13,14,15,16]] \texttt{nums = [[1,2,3,4,5],[6,7],[8],[9,10,11],[12,13,14,15,16]]} nums = [[1,2,3,4,5],[6,7],[8],[9,10,11],[12,13,14,15,16]]
输出: [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16] \texttt{[1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16]} [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16]

数据范围

  • 1 ≤ nums.length ≤ 10 5 \texttt{1} \le \texttt{nums.length} \le \texttt{10}^\texttt{5} 1nums.length105
  • 1 ≤ nums[i].length ≤ 10 5 \texttt{1} \le \texttt{nums[i].length} \le \texttt{10}^\texttt{5} 1nums[i].length105
  • 1 ≤ sum(nums[i].length) ≤ 10 5 \texttt{1} \le \texttt{sum(nums[i].length)} \le \texttt{10}^\texttt{5} 1sum(nums[i].length)105
  • 1 ≤ nums[i][j] ≤ 10 5 \texttt{1} \le \texttt{nums[i][j]} \le \texttt{10}^\texttt{5} 1nums[i][j]105

解法

思路和算法

这道题给定的二维数组 nums \textit{nums} nums 最多有 1 0 5 10^5 105 行和 1 0 5 10^5 105 列,如果直接遍历二维数组中的每个位置,则最多需要遍历 1 0 10 10^{10} 1010 个位置,会超出时间限制,因此需要考虑时间复杂度更低的解法。

由于 nums \textit{nums} nums 不是完整的矩阵,可能有部分位置并没有元素,元素总数最多是 1 0 5 10^5 105,因此只需要遍历有元素的位置,并将元素排序。

根据对角线遍历的规则,每条对角线的方向是从左下到右上,依次遍历每条对角线,同一条对角线上的元素顺序是列下标升序顺序(或者行下标降序顺序)。

由于同一条对角线上的每个位置的行下标与列下标之和是定值,因此可以使用行下标与列下标之和表示对角线编号,对角线编号用于区分不同的对角线。

遍历 nums \textit{nums} nums 并使用列表存储每个元素的信息,每个元素需要记录三个信息:元素所在的行下标与列下标之和、元素所在的列下标、元素值,其中元素所在的行下标与列下标之和即为对角线编号。

遍历之后对列表排序,排序的依据如下:

  1. 如果两个元素的对角线编号不同,则根据对角线编号升序排序;

  2. 如果两个元素的对角线编号相同,则根据列下标升序排序。

遍历排序后的列表,对于列表中的每个元素,将元素值填入结果数组中。

代码

class Solution {public int[] findDiagonalOrder(List<List<Integer>> nums) {List<int[]> list = new ArrayList<int[]>();int rows = nums.size();for (int i = 0; i < rows; i++) {List<Integer> rowList = nums.get(i);int cols = rowList.size();for (int j = 0; j < cols; j++) {int num = rowList.get(j);list.add(new int[]{i + j, j, num});}}Collections.sort(list, (a, b) -> {if (a[0] != b[0]) {return a[0] - b[0];} else {return a[1] - b[1];}});int size = list.size();int[] order = new int[size];for (int i = 0; i < size; i++) {order[i] = list.get(i)[2];}return order;}
}

复杂度分析

  • 时间复杂度: O ( n log ⁡ n ) O(n \log n) O(nlogn),其中 n n n 是二维数组 nums \textit{nums} nums 中的元素个数。排序需要 O ( n log ⁡ n ) O(n \log n) O(nlogn) 的时间,每次遍历都需要 O ( n ) O(n) O(n) 的时间,因此时间复杂度是 O ( n log ⁡ n ) O(n \log n) O(nlogn)

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是二维数组 nums \textit{nums} nums 中的元素个数。列表需要 O ( n ) O(n) O(n) 的空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1547032.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

阅读记录:iCaRL: Incremental Classifier and Representation Learning

1. Contribution 提出了一种新的训练策略&#xff0c;iCaRL&#xff1a;允许以增量方式学习&#xff1a;只需要同时存在一小部分类别的训练数据&#xff0c;新类别可以逐步添加。同时学习分类器和数据表示&#xff1a;iCaRL能够同时学习强大的分类器和数据表示&#xff0c;这与…

vscode【实用插件】Markdown Preview Enhanced 预览 .md 文件

安装 在 vscode 插件市场的搜索 Markdown Preview Enhanced点安装 使用 用 vscode 打开任意 .md 文件右键快捷菜单 最终效果 可打开导航目录

有哪些小众但高逼格的蓝牙耳机推荐?百元开放式耳机推荐大赏

如今的耳机市场中&#xff0c;主流品牌的影响力不容小觑。然而&#xff0c;还有一些小众的耳机品牌&#xff0c;犹如未被发掘的珍宝&#xff0c;静候着人们去探索。这些小众品牌或许没有进行大规模的广告推广&#xff0c;但它们凭借独特的设计、出色的音质以及对品质的不懈坚持…

需求: 通过后台生成的树形结构,返回给前台用于动态生成表格标题,并将对应标题下面的信息对应起来

1. 如图所以&#xff0c;完成以下内容对应 2. 代码示例如下&#xff0c; 动态生成树形结构列名称&#xff0c;并将表格中存在的值与其对应起来 /*** 查询资源计划列表** param resourcePlan 资源计划* return 资源计划*/Overridepublic Map<String, Object> selectResour…

【通俗易懂】FFT求解全过程,各参数详细解释

在进行FFT全过程讲解之前&#xff0c;小编先给大家解释一下&#xff0c;在FFT中出现的一些参数名词解释。 &#xff08;1&#xff09;采样频率 Fs Fs 1 / 采样间隔 根据奈奎斯特定理&#xff1a;Fs ≥ 最高频率分量的两倍&#xff0c;这样才能避免混叠 &#xff08;2&…

CAT1 RTU软硬件设计开源资料分析(TCP协议+Modbus协议+GNSS定位版本 )

01 CAT1 RTU方案简介&#xff1a; 远程终端单元( Remote Terminal Unit&#xff0c;RTU)&#xff0c;一种针对通信距离较长和工业现场环境恶劣而设计的具有模块化结构的、特殊的计算机测控单元&#xff0c;它将末端检测仪表和执行机构与远程控制中心相连接。 奇迹TCP RTUGNS…

Alertmanager 路由匹配

Alertmanager主要负责对Prometheus产生的告警进行统一处理&#xff0c;因此在Alertmanager配置中一般会包含以下几个主要部分&#xff1a; 全局配置&#xff08;global&#xff09;&#xff1a;用于定义一些全局的公共参数&#xff0c;如全局的SMTP配置&#xff0c;Slack配置等…

uni-app canvas文本自动换行

封装 // 填充自动换行的文本function fillFeedText({ctx, text, x, y, maxWidth, lineHeight, color, size}) {// 文本配置ctx.setFontSize(size);ctx.setFillStyle(color);// 计算文本换行宽高&#xff0c;换行逻辑const words text.split();let line ;const lines [];for …

en造数据结构与算法C# 二叉树的顺序存储和前中后序遍历

二叉树的序号和索引区别 二叉树的顺序存储代码 我用的是List表&#xff0c;只要是线性表就都能实现二叉树 public class Tree<T> : MonoBehaviour {private List<T> bitTree new List<T>();//添加顺序存储方法public void AddTree(T[] values){for(int i…

2024最新盘点:推荐几款主流的采购管理系统

大家都明白采购对制造型企业的重要性&#xff0c;但是在面对市场上琳琅满目的采购管理系统企业却不知道该如何选择&#xff0c;不要担心。 本篇文章将对市面上知名的采购管理系统进行综合测评&#xff0c;深入剖析这些平台的特点与优势。看完这篇内容&#xff0c;你将对不同采…

这本书简直就是自然语言处理学习者的福音!

自然语言处理被誉为“人工智能皇冠上的明珠”! 深度学习等技术的引入为自然语言处理技术带来了一场革命&#xff0c;近年来也出现了自然语言处理的新范式。 早期的静态词向量预训练模型&#xff0c;以及后来的动态词向量预训练模型&#xff0c;特别是2018 年以来&#xff0c;…

书生大模型实战营学习[9] OpenCompass 评测 InternLM-1.8B 实践

准备工作 打开开发机&#xff0c;选择cuda11.7环境&#xff0c;A100选择10%&#xff0c;点击创建&#xff0c;然后进入开发机即可&#xff0c;和之前的操作一样。接下来创建环境&#xff0c;下载必要的依赖包 conda create -n opencompass python3.10 conda install pytorch2…

盘点几款财务人必备的财务管理系统,建议收藏!

相信很多财务人在工作中会遇到各种各样的难题&#xff0c;数据杂乱、对账不清晰、财务流程复杂等&#xff0c;一个好用的财务管理系统绝对是雪中送炭。那么财务人知道有哪些财务管理系统吗&#xff1f; 财务管理系统从多方面为财务人的工作保驾护航&#xff0c;优化流程系统、…

数据结构:实现链式结构二叉树(Tree) 手把手带你入门数据结构~

文章目录 前言一、链式结构二叉树的概念1. 定义2. 节点结构3. 操作4. 优势与劣势 二、链式结构二叉树的实现1. 树结构的定义2. 树的遍历&#xff08;1&#xff09;前序遍历&#xff08;2&#xff09;中序遍历&#xff08;3&#xff09;后序遍历 3. 二叉树结点个数4. 二叉树叶子…

828华为云征文 | 基于华为云Flexus云服务器X搭建部署——AI知识库问答系统(使用1panel面板安装)

&#x1f680;对于企业来讲为什么需要华为云Flexus X来搭建自己的知识库问答系统&#xff1f;&#xff1f;&#xff1f; 【重塑知识边界&#xff0c;华为云Flexus云服务器X引领开源问答新纪元&#xff01;】 &#x1f31f; 解锁知识新动力&#xff0c;华为云Flexus云服务器X携…

力扣 简单 876.链表的中间结点

文章目录 题目介绍题解 题目介绍 题解 法一&#xff1a; class Solution {public ListNode middleNode(ListNode head) {ListNode cur head;int n 0;while (cur ! null) {n;cur cur.next;}ListNode curr head;for (int i 0; i < n / 2; i) {curr curr.next;}return …

C++ 红黑树封装map和set

目录 前言 1.红黑树的改造 1.1主题框架 1.2迭代器 operator &#xff08;&#xff09; begin&#xff08;&#xff09;和end&#xff08;&#xff09; 1.3红黑树相关接口的改造 Find函数的改造 Insert 函数的改造 2.红黑树改造的完整代码 3.Set的封装 4.Map的封装 前…

freeRDP OPenssl

libusb需要下载 我使用的是VS2019编译 所以需要include 与vs2019 在cmake里面修改路径 C:/Users/JPM/source/repos/freeRDP/FreeRDP-stable-2.0/libusb-1.0.24/include/libusb-1.0 C:/Users/JPM/source/repos/freeRDP/FreeRDP-stable-2.0/libusb-1.0.24/VS2019/MS64/static/l…

pycharm24.2运行框中无法输入中文但是可以粘贴中文、输入英文、数字

文章目录 一、问题描述二、解决办法解决办法1解决办法2解决办法3 一、问题描述 pycharm24.2版本中运行框中无法输入中文&#xff0c;敲击空格键发现中文并没有输入进去: 但是可以粘贴中文: 输入英文、数字没有问题。 二、解决办法 该问题为pycharm24.2版本问题。 解决办法…

AI无人直播新标杆,一站式直播解决方案:打造专属舞台!

AI无人直播新标杆&#xff0c;一站式直播解决方案&#xff1a;打造专属舞台&#xff01; 在数字化浪潮的汹涌澎湃中&#xff0c;AI技术正以前所未有的速度渗透至各行各业&#xff0c;其中&#xff0c;直播行业作为数字内容传播的重要阵地&#xff0c;正经历着一场由AI引领的深刻…