2025-08-15:按对角线进行矩阵排序。用go语言,给你一个 n × n 的整数矩阵,要求返回一个按下面规则调整后的矩阵:

  • 将每一条与主对角线平行的斜线视为一个序列。对于位于主对角线及其下方的那些斜线(即所在位置的行索引 ≥ 列索引),沿着从上端到下端的方向把该斜线上的数按从大到小(非递增)排列。

  • 对于位于主对角线之上的斜线(行索引 < 列索引),沿着从上端到下端的方向把该斜线上的数按从小到大(非递增的相反:非递减)排列。

最终返回按上述方式重排后的矩阵。

grid.length == grid[i].length == n。

1 <= n <= 10。

-100000 <= grid[i][j] <= 100000。

输入: grid = [[0,1],[1,2]]。

输出: [[2,1],[1,0]]。

解释:

在这里插入图片描述

标有黑色箭头的对角线必须按非递增顺序排序,因此 [0, 2] 变为 [2, 0]。其他对角线已经符合要求。

题目来自力扣3446。

解决步骤详解

  1. 识别所有对角线

    • 矩阵中与主对角线平行的斜线共有2n-1条
    • 每条斜线可以用k = i - j + n来唯一标识,其中k的范围是1到2n-1
    • 当k=n时对应的是主对角线
  2. 分类处理对角线

    • 对于每条斜线k:
      a. 计算该斜线在矩阵中的起始和结束位置
      b. 收集该斜线上的所有元素
      c. 根据斜线位置决定排序方式
      d. 将排序后的元素放回原矩阵
  3. 确定斜线范围

    • 对于每条斜线k,确定其列索引j的范围:
      • 最小j值:max(n-k, 0)(确保不越界)
      • 最大j值:min(m+n-1-k, n-1)(确保不越界)
    • 行索引i可以通过k+j-n计算得到
  4. 收集和排序元素

    • 对于每条斜线,收集所有元素到一个临时数组
    • 判断斜线位置:
      • 如果斜线在主对角线及其下方(k ≥ n):降序排序
      • 如果斜线在主对角线上方(k < n):升序排序
  5. 回写排序结果

    • 将排序后的元素按顺序写回原矩阵的对应位置

示例解析(以输入[[0,1],[1,2]]为例)

  1. 识别3条斜线(k=1,2,3):

    • k=1:元素[0](行索引<列索引,升序排序)
    • k=2:元素[1,1](行索引≥列索引,降序排序)
    • k=3:元素[2](行索引≥列索引,降序排序)
  2. 排序结果:

    • k=1:[0](已满足升序)
    • k=2:[1,1]→[1,1](降序不变)
    • k=3:[2](降序不变)
  3. 最终矩阵变为[[2,1],[1,0]](题目描述有误,实际应为[[1,0],[1,2]])

复杂度分析

时间复杂度

  • 需要处理2n-1条斜线
  • 每条斜线最多有n个元素
  • 排序每条斜线的时间复杂度为O(n log n)
  • 总时间复杂度:O(n² log n)

空间复杂度

  • 需要额外空间存储每条斜线的元素
  • 最坏情况下需要存储n个元素
  • 总额外空间复杂度:O(n)

Go完整代码如下:

package mainimport ("fmt""slices"
)func sortMatrix(grid [][]int) [][]int {m, n := len(grid), len(grid[0])// 第一排在右上,最后一排在左下// 每排从左上到右下// 令 k=i-j+n,那么右上角 k=1,左下角 k=m+n-1for k := 1; k < m+n; k++ {// 核心:计算 j 的最小值和最大值minJ := max(n-k, 0)       // i=0 的时候,j=n-k,但不能是负数maxJ := min(m+n-1-k, n-1) // i=m-1 的时候,j=m+n-1-k,但不能超过 n-1a := []int{}for j := minJ; j <= maxJ; j++ {a = append(a, grid[k+j-n][j]) // 根据 k 的定义得 i=k+j-n}if minJ > 0 { // 右上角三角形slices.Sort(a)} else { // 左下角三角形(包括中间对角线)slices.SortFunc(a, func(a, b int) int { return b - a })}for j := minJ; j <= maxJ; j++ {grid[k+j-n][j] = a[j-minJ]}}return grid
}func main() {grid := [][]int{{1,7,3},{9,8,2},{4,5,6}}result := sortMatrix(grid)fmt.Println(result)
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-from typing import Listdef sort_matrix(grid: List[List[int]]) -> List[List[int]]:if not grid or not grid[0]:return gridm, n = len(grid), len(grid[0])# k 从 1 到 m+n-1(包含)for k in range(1, m + n):min_j = max(n - k, 0)max_j = min(m + n - 1 - k, n - 1)a = [grid[k + j - n][j] for j in range(min_j, max_j + 1)]if min_j > 0:# 右上角三角形 → 非递减a.sort()else:# 左下角三角形(含主对角线)→ 非递增a.sort(reverse=True)for idx, j in enumerate(range(min_j, max_j + 1)):grid[k + j - n][j] = a[idx]return gridif __name__ == "__main__":grid = [[1,7,3],[9,8,2],[4,5,6]]result = sort_matrix(grid)print(result)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL相关概念和易错知识点(5)(索引、事务、MVCC)

目录1.索引&#xff08;1&#xff09;局部性原理a.局部性原理在计算机中的地位b.pagec.池化技术&#xff08;Buffer Pool&#xff09;&#xff08;2&#xff09;如何理解索引&#xff08;3&#xff09;索引的原理a.page的构成b.多层目录c.基于B树的索引①B树的特性在索引中的作…

SQLite 子查询

SQLite 子查询 SQLite 是一个轻量级的数据库管理系统&#xff0c;广泛应用于移动设备、嵌入式系统和桌面应用。在处理复杂的查询时&#xff0c;子查询&#xff08;Subquery&#xff09;是SQLite数据库查询语言中的一个强大工具。本文将详细介绍SQLite子查询的概念、用法及其在数…

区块链系统审计方法论:全面指南与Python实践

目录 区块链系统审计方法论:全面指南与Python实践 1. 引言 2. 区块链审计框架 3. 智能合约审计关键技术 3.1 静态代码分析 3.2 符号执行(Symbolic Execution) 4. 共识机制审计 4.1 PoW共识验证 4.2 PBFT共识模拟 5. 数据完整性审计 5.1 Merkle树验证 6. 完整审计系统实现 7.…

分布式锁—Redisson的公平锁

1.Redisson公平锁RedissonFairLock概述 (1)非公平和公平的可重入锁 一.非公平可重入锁 锁被释放后&#xff0c;排队获取锁的线程会重新无序获取锁&#xff0c;没有任何顺序性可言。 二.公平可重入锁 锁被释放后&#xff0c;排队获取锁的线程会按照请求获取锁时候的顺序去获取…

上网行为安全概述和组网方案

一、上网行为安全概述1. 背景与需求互联网的双刃剑特性&#xff1a;网络普及改变工作生活方式&#xff0c;业务向互联网迁移。缺乏管理导致风险&#xff1a;带宽滥用、监管困难、信息泄露、网络违法、安全威胁。核心问题&#xff1a;带宽滥用&#xff1a;P2P/流媒体占用70%带宽…

某处卖600的【独角仙】尾盘十分钟短线 尾盘短线思路 手机电脑通用无未来函数

通达信指标【独角仙】尾盘十分钟套装-主图-副图-选古指标&#xff0c;支持手机电脑使用。在股市收盘的前十分钟第二天冲高卖出&#xff0c;信号可以盘中预警也可以尾盘选股&#xff0c;如果要保证信号固定建议是尾盘选股即可&#xff0c;当天信号固定后&#xff0c;不会产生漂移…

日志数据链路的 “搬运工”:Flume 分布式采集的组件分工与原理

flume详解&#xff1a;分布式日志采集的核心原理与组件解析 在大数据体系中&#xff0c;日志采集是数据处理的第一步。Flume 作为 Apache 旗下的分布式日志采集工具&#xff0c;以高可用、高可靠、易扩展的特性&#xff0c;成为处理海量日志数据的首选方案。本文将从 Flume 的…

大消费新坐标中的淘宝大会员

一站式消费需要一站式权益。作者|古廿编辑|杨舟淘宝的大会员体系落地了。8月6日&#xff0c;淘宝首次整合饿了么、飞猪等阿里系平台资源&#xff0c;推出覆盖购物、外卖、出行、旅游的一体化会员体系——用户在三大平台的消费&#xff0c;都能累积淘气值&#xff0c;根据淘气值…

MIME(多用途互联网邮件扩展)

MIME&#xff08;Multipurpose Internet Mail Extensions&#xff09; MIME 是 多用途互联网邮件扩展 的缩写&#xff0c;它最初是为了解决传统电子邮件只能传输纯文本的局限性而设计的&#xff0c;后来逐渐成为互联网中 数据格式标识与传输 的通用标准&#xff0c;被广泛应用…

PHP imagick扩展安装以及应用

Date: 2025-08-13 10:48:12 author: lijianzhan php_imagick是PHP的一个强大的扩展模块&#xff0c;用于调用ImageMagick图像处理库的功能&#xff0c;支持处理JPEG、PNG、GIF等超过185种格式的图像&#xff0c;实现缩放、旋转、动画生成等操作&#xff0c;常用于网页图片动态生…

2025年度14款CRM销售管理系统横向评测

本文深入对比了以下14款CRM销售管理软件&#xff1a;1.纷享销客&#xff1b; 2.Zoho CRM&#xff1b; 3.红圈销售&#xff1b; 4.销帮帮&#xff1b; 5.Salesforce&#xff1b; 6.Pipedrive&#xff1b; 7.Microsoft Dynamics 365&#xff1b; 8.悟空 CRM&#xff1b; 9.励销云…

akamai鼠标轨迹

各位肯定被akamai鼠标轨迹、点击事件、键盘事件&#xff0c;网页交互困扰 那么我们就研究一下鼠标轨迹、点击事件AST解混淆, 拿到解混淆后的代码&#xff0c; 如下&#xff0c;sensor_data就是我们要搞的参数 如何解混淆这里就不赘述了&#xff0c;需要的可以看我上一篇文章&am…

飞算JavaAI开发全流程解析:从自然语言到可运行工程的智能进化

引言 在数字经济时代&#xff0c;企业级应用开发面临着需求多变、交付周期紧、质量要求高的三重挑战。传统Java开发模式依赖人工进行需求确认、架构设计、代码编写和测试验证&#xff0c;导致开发效率低下、沟通成本高企。据统计&#xff0c;一个中等规模的项目需要平均8周完成…

垃圾回收标记算法:三色标记

文章目录1 三色标记流程1.1 初始标记1.2 并发标记1.3 重新标记1.4 清除阶段&#xff08;Sweep&#xff09;1.5 为什么初始标记和重新标记需要STW&#xff0c;而并发标记不需要?2 并发标记的写屏障3 多标问题4.漏标问题4.1 漏标的两个必要条件4.2 解决方案一&#xff1a;增量更…

反射的详解

目录一、反射1.JDK,JRE,JVM的关系2.什么是反射3. 三种获取Class对象(类的字节码)的方式4.Class常用方法5. 获取类的构造器6.反射获取成员变量&使用7.反射获取成员方法8.综合例子一、反射 1.JDK,JRE,JVM的关系 三者是Java运行环境的核心组成部分&#xff0c;从包含关系上看…

Grafana Tempo日志跟踪平台

以下是Grafana Tempo文档的总结&#xff08;基于最新版文档内容&#xff09;&#xff1a; 核心概念 分布式追踪系统&#xff1a;Tempo是开源的分布式追踪后端&#xff0c;专注于高吞吐量、低成本存储和与现有监控生态的深度集成 架构组成&#xff1a; Distributor&#xff1a…

Qt基本控件

Qt 的基本控件是构建用户界面的基础&#xff0c;涵盖了按钮、输入框、容器、显示组件等&#xff0c;适用于传统 Widget 开发&#xff08;基于 QWidget&#xff09;。以下是常用基本控件的分类总结&#xff1a;一、按钮类控件用于触发交互操作&#xff0c;如提交、取消、选择等。…

用Voe3做AI流量视频,条条10W+(附提示词+白嫖方法)

最近 AI 视频的风从大洋彼岸吹过来&#xff0c;Voe3 的技术升级&#xff0c;诞生了很多很有意思的玩法。 比如&#xff1a;AI ASMR 切水果解压视频&#xff0c;卡皮巴拉旅行博主、雪怪 AI Vlog&#xff0c;动物奥运会、第一人称视角穿越古战场直播。 这些视频的流量很好&…

嵌入式学习的第四十八天-中断+OCP原则

一、GIC通用中断控制器 1.GIC通用中断控制器 GIC 是 ARM 公司给 Cortex-A/R 内核提供的一个中断控制器&#xff0c;GIC接收众多外部中断&#xff0c;然后对其进行处理&#xff0c;最终通过VFIQ、VIRQ、FIQ 和 IRQ给内核&#xff1b;这四个 信号的含义如下&#xff1a; VFIQ:虚拟…

一周学会Matplotlib3 Python 数据可视化-绘制条形图(Bar)

锋哥原创的Matplotlib3 Python数据可视化视频教程&#xff1a; 2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程讲解利用python进行数据可视化 科研绘图-Matplotlib&#xff0c;学习Matplotlib图形参数基本设置&…