博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode题解(1135):最低成本联通所有城市(Python)
阅读量:1902 次
发布时间:2019-04-26

本文共 1435 字,大约阅读时间需要 4 分钟。

题目:(中等)

标签:图、Prim算法、Kruskal算法

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( N l o g N ) O(NlogN) O(NlogN) O ( N ) O(N) O(N) 208ms (62.25%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

class Solution:    def minimumCost(self, n: int, connections: List[List[int]]) -> int:        min_idx, min_val = (-1, -1), float("inf")        graph = collections.defaultdict(dict)        for edge in connections:            if edge[1] not in graph[edge[0]] or edge[2] < graph[edge[0]][edge[1]]:                graph[edge[0]][edge[1]] = edge[2]                graph[edge[1]][edge[0]] = edge[2]                if edge[2] < min_val:                    min_idx, min_val = (edge[0], edge[1]), edge[2]        ans = 0        waiting = {
i for i in range(1, n + 1)} heap = [] # 添加最短的边 ans += min_val waiting.remove(min_idx[0]) waiting.remove(min_idx[1]) for n2, v2 in graph[min_idx[0]].items(): if n2 in waiting: heapq.heappush(heap, (v2, n2)) for n2, v2 in graph[min_idx[1]].items(): if n2 in waiting: heapq.heappush(heap, (v2, n2)) while heap and waiting: v1, n1 = heapq.heappop(heap) if n1 in waiting: ans += v1 waiting.remove(n1) for n2, v2 in graph[n1].items(): if n2 in waiting: heapq.heappush(heap, (v2, n2)) return ans if not waiting else -1

转载地址:http://jxkcf.baihongyu.com/

你可能感兴趣的文章
const、底层和顶层
查看>>
explicit限制隐式转换
查看>>
C++ 类和对象
查看>>
数组、new、malloc的内存分配情况
查看>>
C++ 构造函数和析构函数
查看>>
C++ 继承
查看>>
标示符含义
查看>>
C++ 重载
查看>>
C++ 模板
查看>>
C++ 模板2
查看>>
C++ 模板3
查看>>
Python连接读取SQLServer导入Excel
查看>>
C++ 友元
查看>>
C++ 友元《二》
查看>>
C++ 读写文件
查看>>
C++ 异常
查看>>
C++ 截取字符串
查看>>
C++ 命名空间
查看>>
C++ 预编译
查看>>
C++ static
查看>>