【发布时间】:2023-03-04 17:12:01
【问题描述】:
给定一个锯齿状数组:
int[][] edges = new int[][]
{
new int[] {0,1},
new int[] {0,2},
new int[] {0,3},
new int[] {1,4},
};
有没有更优雅的方法来做到这一点:
var adjlist = new List<List<int>>();
for(int i=0; i<n; i++)
{
adjlist.Add(new List<int>());
}
foreach(var arr in edges)
{
int src = arr[0];
int dst = arr[1];
adjlist[src].Add(dst);
adjlist[dst].Add(src);
}
可以改善时间复杂度的方法是理想的。
谢谢。
【问题讨论】:
-
没有什么可以提高时间复杂度,因为它已经尽可能快了 - 第一个维度的线性时间(
new List<>(),列表索引和添加项目到列表是恒定的时间操作)。 -
这段代码是否按您的预期/想要的那样工作?因为它做了一个相当不寻常和可疑的操作
-
代码有效。这是一个 leetcode 问题 261 并通过了那里的测试。将边列表转换为无向图。
标签: c# list jagged-arrays