排序题目:对角线遍历 II

news2024/12/23 13:54:59

文章目录

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

题目

标题和出处

标题:对角线遍历 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.coloradmin.cn/o/2167874.html

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

相关文章

vue3.0 + element plus 全局自定义指令:select滚动分页

需求&#xff1a;项目里面下拉框数据较多 &#xff0c;一次性请求数据&#xff0c;体验差&#xff0c;效果就是滚动进行分页。 看到这个需求的时候&#xff0c;我第一反应就是封装成自定义指令&#xff0c;这样回头用的时候&#xff0c;直接调用就可以了。 第一步 第二步&…

eHR软件的价格一般是多少?

在人力资源数字化转型的大潮中&#xff0c;越来越多的企业开始关注eHR&#xff08;电子人力资源管理&#xff09;软件的采购问题。eHR软件价格并不是一个简单的数字&#xff0c;而是受多种因素影响&#xff0c;具有较大波动性。那么&#xff0c;eHR软件的价格一般是多少呢&…

侧边菜单的展开和折叠

通过按钮控制侧边栏的展开和折叠通过窗口宽度的变化控制侧边栏的展开和折叠&#xff08;小于768px,自动折叠&#xff09; 通过按钮控制展开 通过按钮控制折叠 切换到手机模式自动折叠 环境准备&#xff1a;Vue3Element-UI Plus <script setup> import {onMounted, r…

基于SpringBoot + Vue的Gucci进销存系统

文章目录 前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S 四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论 五、项目代码参考六、数据库代码参考七、项目论文示例结语 前言 &#x1f49b;博主介绍&a…

001. OBS (obs-studio)

1. 下载 https://obsproject.com/download windows c 插件下载 https://obsproject.com/visual-studio-2022-runtimes 2. 操作步骤 https://renwen.shnu.edu.cn/_s40/9a/2c/c28309a760364/page.psp https://zhuanlan.zhihu.com/p/597231652

【Java 问题】基础——IO

接上文 IO 42.Java 中 IO 流分为几种?Java IO体系中的装饰器模式抽象组件&#xff08;Component&#xff09;具体组件&#xff08;Concrete Component&#xff09;抽象装饰器&#xff08;Decorator&#xff09;具体装饰器&#xff08;Concrete Decorator&#xff09;使用装饰器…

喜讯 | 宝兰德「应用服务器软件 V9.5」荣获“2024年度优秀软件产品”殊荣

近日&#xff0c;中国软件行业协会公布了“2024年度推广优秀软件产品”名单。经过专家委员会的评议及最终审核&#xff0c;宝兰德凭借领先的技术能力和丰富的经验积累&#xff0c;中间件核心产品「应用服务器软件 V9.5」获评“2024年度优秀软件产品”。 本次评选活动由中国软件…

基于SpringBoot的在线考试系统设计与实现

1.1 研究背景 21世纪&#xff0c;我国早在上世纪就已普及互联网信息&#xff0c;互联网对人们生活中带来了无限的便利。像大部分的企事业单位都有自己的系统&#xff0c;由从今传统的管理模式向互联网发展&#xff0c;如今开发自己的系统是理所当然的。那么开发在线考试系统意…

vscode【实用插件】Project Manager 项目管理

安装 在 vscode 插件市场的搜索 Project Manager点 安装 安装成功后&#xff0c;vscode 左侧栏会出现 使用 将项目添加到项目列表中 用 vscode 打开项目&#xff0c;点保存即可 将项目移出项目列表 切换项目 单击项目列表中的项目&#xff0c;即可切换到目标项目 新窗口打开…

道一云·七巧和金蝶云星空单据接口对接

道一云七巧和金蝶云星空单据接口对接 对接系统金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的ERP服务平台。K/3Cloud支持的协同应用包括但不…

淘宝霸屏必备工具:淘宝商品评论电商API接口

淘宝商品评论电商API接口是指用于获取淘宝商品评论信息的一种接口&#xff0c;通过该接口可以获取淘宝网上商品的评价内容、评价等级、评价数量等信息。通过了解并使用该接口&#xff0c;能够帮助电商了解消费者对商品的评价情况&#xff0c;做好商品的推广和销售工作。 接口使…

电脑提速秘籍:6款不可不知的Windows实用软件

6款Windows系统上不可或缺的高效工具&#xff0c;每一款都是小巧而强大的存在&#xff0c;让你的电脑使用更加流畅&#xff01; 1.unlocker 当你遇到那些顽固的文件&#xff0c;需要管理员权限或者重启电脑才能删除时&#xff0c;这款只有1.02MB的轻量级工具可以帮你轻松解决问…

《黑神话悟空》战斗流派与技能加点指南及录屏技巧

在深入探索《黑神话悟空》的战斗艺术之前&#xff0c;让我们先来了解一些基本的战斗流派和技能加点策略&#xff0c;这将为你的西游之旅增添无限可能。不仅如此&#xff0c;我们还将介绍一款实用的录屏工具&#xff0c;让你能够轻松记录并分享你的冒险经历。现在&#xff0c;就…

水下生物检测系统源码分享

水下生物检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

SAP B1 流程实操 - 营销单据采购部分(上)

背景 在 SAP B1 中&#xff0c;除开【销售】外超常用的模块就是【采购】&#xff0c;企业可能不涉及生产和库存&#xff08;贸易公司&#xff09;&#xff0c;甚至不涉及采购&#xff08;服务业&#xff09;&#xff0c;但是一定会有基本的 销售。本文中我们讲解 销售 模块的基…

Android Studio上传文件至GithubSVN的忽略文件配置

Android studio升级后&#xff0c;发现原本Github&SVN的忽略文件配置的地方在于找不到了 File -> Settings -> Editor -> File Types -> lgnored Files and Folders 除了原有的&#xff0c;还可以加入下面这些 *.hprof;*.pyc;*.pyo;*.rbc;*.yarb;*~;.DS_Stor…

5. 高阶函数

大型程序成本高昂&#xff0c;这不仅仅是因为构建程序需要花费时间。程序的大小几乎总是涉及复杂性&#xff0c;而复杂性会让程序员感到困惑。混乱的程序员反过来又会在程序中引入错误&#xff08;bug&#xff09;。大型程序则为这些错误提供了大量的隐藏空间&#xff0c;使它们…

如何在调试状态下部署局域网网站

1背景介绍 最近有开发数据统计的网站&#xff0c;老板需及时投放到显示屏&#xff0c;但程序仍需改动&#xff0c;只能先部署到局域网&#xff0c;测试产品不能部署服务器(服务器负担过重&#xff09; 开发框架MVC4sql serverecharts,由于需每隔5分钟刷新&#xff0c;还有ajax…

vue3+vite+qiankun实现微应用

主应用 1、安装qiankun npm install qiankun2、在主应用中创建微应用的入口文件 src\views\micro\index.vue 这个文件主要是用来提供一个 DOM 节点挂载微应用 <template><div class"xin"><p>qiankun入口文档</p><div id"qiankun…

大语言模型水印

来源&#xff1a;ICML-2024 题目&#xff1a;Token-Specific Watermarking with Enhanced Detectability and Semantic Coherence for Large Language Models 参考文献格式&#xff1a;Huo, M., Somayajula, S.A., Liang, Y., Zhang, R., Koushanfar, F. &amp; Xie, P.. …