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

DeepSeek LeetCode 2392.给定条件下构造矩阵 Go实现

以下是 LeetCode 2392「给定条件下构造矩阵」的 Go 语言实现,思路与之前相同:

1. 分别对行约束和列约束进行拓扑排序,得到行顺序和列顺序。
2. 若任一拓扑排序失败(存在环),则返回空矩阵。
3. 建立数字到行索引、列索引的映射。
4. 按映射填充 k x k 矩阵。

```go
func buildMatrix(k int, rowConditions [][]int, colConditions [][]int) [][]int {
// 拓扑排序辅助函数
topoSort := func(n int, edges [][]int) ([]int, bool) {
graph := make([][]int, n+1)
inDeg := make([]int, n+1)
for _, e := range edges {
u, v := e[0], e[1]
graph[u] = append(graph[u], v)
inDeg[v]++
}
queue := []int{}
for i := 1; i <= n; i++ {
if inDeg[i] == 0 {
queue = append(queue, i)
}
}
order := []int{}
for len(queue) > 0 {
u := queue[0]
queue = queue[1:]
order = append(order, u)
for _, v := range graph[u] {
inDeg[v]--
if inDeg[v] == 0 {
queue = append(queue, v)
}
}
}
if len(order) != n {
return nil, false
}
return order, true
}

rowOrder, ok := topoSort(k, rowConditions)
if !ok {
return [][]int{}
}
colOrder, ok := topoSort(k, colConditions)
if !ok {
return [][]int{}
}

// 建立数字 -> 行索引 / 列索引 的映射
rowPos := make([]int, k+1)
for i, num := range rowOrder {
rowPos[num] = i
}
colPos := make([]int, k+1)
for i, num := range colOrder {
colPos[num] = i
}

// 构造矩阵
mat := make([][]int, k)
for i := range mat {
mat[i] = make([]int, k)
}
for num := 1; num <= k; num++ {
r := rowPos[num]
c := colPos[num]
mat[r][c] = num
}
return mat
}
```

复杂度分析

· 时间复杂度:O(k + m),其中 m 为 rowConditions 与 colConditions 的总边数。
· 空间复杂度:O(k + m),用于存储图和入度数组。

注意事项

· 拓扑排序返回的顺序不唯一,任意合法顺序均可构造矩阵。
· 若行约束或列约束存在环,立即返回空 [][]int{}。

http://www.jsqmd.com/news/825614/

相关文章:

  • 飞凌OKA40i-C开发板SATA硬盘连接、挂载与性能测试实战指南
  • 概率论别再死记硬背了,聪明人都在用这套方法提分
  • 3分钟搞定!基于YOLOv5的智能象棋连线工具Vin象棋实战教程
  • 舆情监控系统的架构
  • Go语言轻量级Web框架Weebo:极致简洁与高性能API服务实践
  • 明日方舟游戏资源库:你的创作宝库与二次开发指南
  • Google Workspace技能库:模块化自动化工作流设计与实战
  • 如何3步轻松下载B站视频?BilibiliDown跨平台下载器完整指南
  • PRISM框架:多模态视觉运动模仿学习技术解析
  • ChatGPT插件提示词抓取与分析:从数据洞察到AI应用开发
  • 量子计算中的辛基理论与MBQC实现
  • JAVA德州扑克小酒馆小程序开发|源码搭建与功能实现方案
  • MATLAB集成大语言模型:工程实践与本地化部署指南
  • Clawstore:轻量级S3兼容对象存储的架构解析与生产实践
  • [日记]豆包TTS音色1.0尝试
  • OpenGL 调试方式
  • OpenAI密测浏览器Agent,AI开始替你上网;Cursor越来越像“AI操作系统”;开发者转向本地模型对抗Token通胀
  • 未来是神经-符号的:AI 推理是如何演变的
  • 【地理信息智能处理新范式】:基于NotebookLM的时空数据溯源、矛盾校验与可视化生成闭环
  • 手机怎么制作透明背景手写电子签名免费安全且无需登录
  • 2026年当前,如何选择可靠的影像测量仪品牌? - 2026年企业推荐榜
  • AI教材编写新突破!低查重AI工具助力,3天完成20万字教材!
  • DeepSeek LeetCode 2398. 预算内的最多机器人数目 public int maximumRobots(int[] chargeTimes, int[]
  • 高性能缓冲管理中的数组翻译技术解析
  • 前端搜索框焦点管理:从交互细节到工程实践
  • 2026年近期,专业定制与品质保障:汕头杯盖膜市场优选厂商分析 - 2026年企业推荐榜
  • ARM GIC寄存器架构与ERRPIDR解析
  • PIM-LLM:1-bit量化大语言模型的混合内存计算架构
  • 网络IO模型-从BIO到IO多路复用
  • ARM AArch32系统寄存器架构与虚拟化实践