c# - C# 锯齿状数组到列表列表
问题描述
给定一个锯齿状数组:
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);
}
改善时间复杂度的东西将是理想的。
谢谢你。
解决方案
我的假设是您示例中的代码没有按您的预期工作(我可能错了)。然而,将锯齿状数组转换为列表列表应该像下面这样简单。我怀疑你会比这更有效率,尽管你可以进行基准测试。
以下是 O(n),这意味着某处需要迭代每个元素。也就是说,记忆不能被魔法。话虽如此,将使用集合ToList
调用List
构造函数并使用反过来使用的实例成员,因此对数据类型和平台进行了极大的优化。CopyTo
Array.Copy
var results = edges.Select(x => x.ToList()).ToList();
推荐阅读
- javascript - 如何在 peerJS 中启用 ScreenShare
- reactjs - Webpack-dev-server 捆绑 React JS 但不捆绑 SCSS
- math - 如何创建也是 6 位的 6 位整数的不同迭代?
- c - 使用 fork() 可能输出的代码
- javascript - Jquery终端注册和登录
- react-native - 来自 ImagePicker API 的 Expo 图像编辑器
- html - 为什么我的“位置:固定”导航栏不会保留在文档的中心?
- xml - 为什么 ShopWare 5.4.6 Data 中的文章的 XML 导入只考虑了部分?
- javascript - onclick 函数在 JS 中不起作用
- javascript - 为什么我的当我尝试移动它时元素开始颤抖?