LeetCode题解(1478):安排邮筒(Python)
发布日期:2021-06-29 20:15:22
浏览次数:3
分类:技术文章
本文共 1274 字,大约阅读时间需要 4 分钟。
题目:(困难)
标签:数学、动态规划
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O ( N 2 × K ) O(N^2×K) O(N2×K) | O ( N × ( N + K ) ) O(N×(N+K)) O(N×(N+K)) | 644ms (38.56%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
class Solution: def minDistance(self, houses: List[int], k: int) -> int: # 按位置排序房间 houses.sort() size = len(houses) # ----------计算从第i个房子到第j个房子共享1个邮筒的最短距离---------- # 构造状态矩阵:cost[i][j]表示从第i个房子到第j个房子共享1个邮筒的最小距离 cost = [[-1] * size for _ in range(size)] for l in range(size): for i in range(size - l): j = i + l if l == 0: cost[i][j] = 0 elif l == 1: cost[i][j] = houses[j] - houses[i] else: cost[i][j] = cost[i + 1][j - 1] + (houses[j] - houses[i]) # 构造状态矩阵:dp[i][j]表示截止到第i(零索引)个房子,共用j+1个邮筒的最小距离 dp = [[cost[0][i]] * k for i in range(size)] for i2 in range(size): for j in range(1, k): # 遍历之前的所有房子,将每个房子作为分界线:第i1个房子(包含)前共享(j+1)-1个邮筒,第i1+1个房子后共享1个邮箱 for i1 in range(i2): # print(i2, j, i1, "->", dp[i1][j - 1] + cost[i1 + 1][i2]) dp[i2][j] = min(dp[i2][j], dp[i1][j - 1] + cost[i1 + 1][i2]) return int(dp[-1][-1])
转载地址:https://dataartist.blog.csdn.net/article/details/112500832 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月08日 13时34分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
SDL arm linux平台交叉编译(好文章已测试)
2019-04-30
linux 常用查看设备命令
2019-04-30
Linux内核及文件系统配置编译 - 关于内核配置
2019-04-30
android应用前期开发之经验总结
2019-04-30
Linux 下zip包的压缩与解压
2019-04-30
Andoird SDK目录解析
2019-04-30
Google Guava官方教程(中文版)
2019-04-30
Guava教程
2019-04-30
The Book of QT4 翻译:1.2 布局,对象层级和内存管理
2019-04-30
麒麟信安UniKylin3.3安装配置pyqt5运行环境
2019-04-30
linux中python3 pip快速搭建pyqt5环境
2019-04-30
泛型程序设计
2019-04-30
Java集合
2019-04-30
Java List集合
2019-04-30
Java Set集合 HashSet TreeSet
2019-04-30
Java Map集合
2019-04-30
ASCII、ISO-8859-1和GB系列编码
2019-04-30
Unicode及UTF-8、UTF-16、UTF-32
2019-04-30
UCS-2、UCS-4
2019-04-30
Unicode和UCS
2019-04-30