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

2026-07-28:统计每个顶点的度。用go语言,给你一个 n x n 的二维整数数组,它代表一个无向图的邻接矩阵,包含 n 个编号从 0 到 n-1 的顶点。 矩阵中的值表示两个顶点之间是否有边:

2026-07-28:统计每个顶点的度。用go语言,给你一个 n x n 的二维整数数组,它代表一个无向图的邻接矩阵,包含 n 个编号从 0 到 n-1 的顶点。

矩阵中的值表示两个顶点之间是否有边:1 表示相连,0 表示不相连。一个顶点的度是指和它相连的边的总数。

请你计算并返回一个长度为 n 的数组,其中第 i 个位置存放顶点 i 的度数。

1 <= n == matrix.length == matrix[i].length <= 100。

matrix[i][i] == 0。

matrix[i][j] 仅为 0 或 1。

matrix[i][j] == matrix[j][i]。

输入: matrix = [[0,1,1],[1,0,1],[1,1,0]]。

输出: [2,2,2]。

解释:

顶点 0 与顶点 1 和 2 相连,因此其度为 2。

顶点 1 与顶点 0 和 2 相连,因此其度为 2。

顶点 2 与顶点 0 和 1 相连,因此其度为 2。

因此,答案为 [2, 2, 2]。

题目来自力扣3898。

第一步:理解输入结构

输入是一个n x n的二维整数数组matrix,代表一个无向图的邻接矩阵。
题目保证了以下几点:

  • 矩阵是方阵,即len(matrix)等于len(matrix[i])
  • 对角线元素matrix[i][i]都为 0,表示没有自环。
  • 矩阵是对称的,即matrix[i][j] == matrix[j][i],满足无向图的性质。
  • 每个元素只能是 0 或 1,1 表示顶点 i 和 j 之间有一条边,0 表示没有边。

第二步:确定任务目标

我们要返回一个长度为n的数组ans,其中ans[i]是顶点i的度数。
度数的定义是:与该顶点直接相连的边的条数。
因为是无向图,一条边连接两个顶点,在度数统计中会被两个端点各自计数一次。


第三步:初始化结果数组

函数findDegrees接收矩阵后,首先用make([]int, len(matrix))创建一个与顶点数量相同长度的整数切片ans,此时所有元素默认值为 0。
这个切片将用来累加每个顶点的边数。


第四步:按行遍历,累加度数

代码的外层循环使用for i, row := range matrix遍历矩阵的每一行:

  • 变量i是当前顶点编号,取值从 0 到 n-1。
  • 变量row是第i行的整行数据,它也是一个切片,长度等于 n。

对于每一行row,内层循环用for _, x := range row遍历该行的每一个元素x

  • 由于矩阵只包含 0 和 1,x的值要么是 0(无边),要么是 1(有边)。
  • 直接将x加到ans[i]上:ans[i] += x

这样,对于顶点i,会把它所在的整行(即顶点 i 与其他所有顶点 j 的连接情况)上的 1 全部累加。
因为矩阵是对称的,这一行有多少个 1,就代表顶点 i 与多少个其他顶点相连,也就是顶点 i 的度数。


第五步:返回结果

当外层循环结束,所有顶点的度数都已累加完毕,函数直接返回填充好的ans切片。


第六步:主函数调用与输出

main函数中,定义了一个 3x3 的示例矩阵,对应一个三角形无向图(每个顶点都与另外两个相连),然后调用findDegrees得到结果[2, 2, 2],最后打印出来。


复杂度分析

时间复杂度:

  • 外层循环执行 n 次,内层循环对每行同样执行 n 次,总共访问矩阵的每一个元素恰好一次。
  • 对每个元素只做一次累加操作,常数时间。
  • 所以总的时间复杂度是 O(n²)。

额外空间复杂度:

  • 除了输入矩阵本身占用的空间(不计入额外空间),算法只创建了一个长度为 n 的结果数组ans
  • 没有使用其他与 n 相关的辅助数据结构。
  • 因此,总的额外空间复杂度是 O(n)。

总结:
该算法通过遍历邻接矩阵的每一行,累加每行的值来得到每个顶点的度数,过程简单直接,时间复杂度 O(n²),额外空间复杂度 O(n)。

Go完整代码如下:

packagemainimport("fmt")funcfindDegrees(matrix[][]int)[]int{ans:=make([]int,len(matrix))fori,row:=rangematrix{for_,x:=rangerow{ans[i]+=x}}returnans}funcmain(){matrix:=[][]int{{0,1,1},{1,0,1},{1,1,0}}result:=findDegrees(matrix)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-fromtypingimportListdeffind_degrees(matrix:List[List[int]])->List[int]:ans=[0]*len(matrix)fori,rowinenumerate(matrix):ans[i]=sum(row)returnansif__name__=="__main__":matrix=[[0,1,1],[1,0,1],[1,1,0]]result=find_degrees(matrix)print(result)

C++完整代码如下:

#include<iostream>#include<vector>std::vector<int>findDegrees(conststd::vector<std::vector<int>>&matrix){std::vector<int>ans(matrix.size(),0);for(size_t i=0;i<matrix.size();++i){for(intx:matrix[i]){ans[i]+=x;}}returnans;}intmain(){std::vector<std::vector<int>>matrix={{0,1,1},{1,0,1},{1,1,0}};std::vector<int>result=findDegrees(matrix);std::cout<<"[";for(size_t i=0;i<result.size();++i){std::cout<<result[i];if(i!=result.size()-1)std::cout<<", ";}std::cout<<"]"<<std::endl;return0;}

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

相关文章:

  • 基于Mind+与Python的智能家居数据可视化大屏实战
  • 如何用Goose桌面应用告别命令行:3个核心技巧提升AI助手使用效率
  • 三分钟搞定!免费开源中文字体霞鹜文楷终极安装使用指南
  • 3步搞定数据质量监控:DataHub元数据平台的实战指南
  • OpenAI使用限制故障解析:分布式系统状态管理与容错实践
  • 怎样在3分钟内为Zotero打造专属插件商店:开源插件市场实战指南
  • 2026年|外贸人必看!谷歌SEO服务商深度测评与推荐
  • Arduino UNO模拟接口与ADC原理:从基础使用到精度提升实战
  • OS-X-Clover-Laptop-Config终极指南:快速配置Intel显卡黑苹果系统
  • 从蟹壳到火控模型:壳聚糖导电膜与Arduino的跨学科创客实践
  • Nginx TLS安全加固实战:从OpenSSL 3.x原理到配置优化
  • 企业官网响应式开发:如何用Bootstrap在30分钟内搭建专业级网站?
  • 项目文档:基于MATLAB的语音信号智能降噪分析系统设计与实现
  • 基于BERT的金融新闻去重系统设计与优化
  • AI自主组建虚拟团队:PARL框架与动态工作流引擎解析
  • mGBA模拟器深度解析:从精准模拟到高级调优实战指南
  • Python控制乐高EV3机器人:从环境搭建到PID巡线实战
  • bq27x10EVM评估模块实战:从硬件连接到软件配置的电池电量计开发指南
  • 3分钟实现Wand游戏修改器高级功能完整解锁:终极免费方案
  • 2026有机生抽直销厂商盘点:口碑与实力兼具的酿造企业解析 - 装修教育财税推荐2026
  • ThinkPHP 8框架与TCP协议交互机制解析
  • 2026年 马路划线漆品牌厂家:道路标线漆、反光标线漆、环保快干型耐磨防滑路标漆专业供应商 - 卓企推荐
  • Claude Code系统提示词精简策略:80%长度削减与质量提升实战
  • 2026 年 WMS 仓储管理系统推荐 大消费行业选型参考
  • 如何快速定制Windows 11任务栏时钟:ElevenClock完整指南
  • Genesis机器人仿真平台:解锁下一代具身智能研究的5大核心优势
  • 解密MiroFish:基于群体智能的下一代预测引擎架构解析
  • 基于ESP32的智能泡泡机DIY:从传感器到执行器的自动化实践
  • LLM 流式输出用 SSE 时那些会乱码卡顿的字节级坑
  • RISC-V处理器验证:深度解析riscv-tests测试套件的实战应用