leetcode 134
2021/8/8 23:35:51
本文主要是介绍leetcode 134,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
class Solution: """ 只要总和是大于 0 的那么就一定可以找到这样的点, 可以用数学归纳法进行证明 """ def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int: if not gas: return -1 total_sum = 0 part_sum = 0 index = -1 for i, v1 in enumerate(gas): v2 = cost[i] diff = v1 - v2 total_sum += diff part_sum += diff if part_sum >= 0: if index == -1: index = i continue part_sum = 0 index = -1 if total_sum < 0: return -1 if index == -1: raise Exception return index
我是这样想的, 对于一个点而言, gas减去cost是这个点的盈余, 如果要成环 那么盈余的总和必须要大于等于 0;
把盈余是正的点叫做正数点, 同理得到负数点和非负点;
那么如果一个盈余总和大于等于0的圈是不是总是可以找到这样的起点呢?
1个数必然, 2个数也必然, 三个数的话. 因为盈余之和大于等于0, 所以我一定可以找到两个相邻点, 前一个点盈余是非负的, 并且两个点的盈余之和大于等于0; 可以这样想:
如果有两个非正点一定可以找到; 如果有两个负点, 因为总和大于等于0, 所以剩下的正数点一定是大于两个负数点的. 将这个正数点和紧接其后的负数点合并, 得证.
现在如果n个点满足, 如果盈余之和为非负, 一定可以找到某一个点, 从该点出发逆时针可以走通;
n+1个点的时候, 去找到这样的相邻两点, 第一个点是非负点, 然后两点之和同样非负. 容易找到, 将这两个点看做一个点, 那么n+1个点也得到了证明.
数学归纳法告诉我们这个结论是正确的
这篇关于leetcode 134的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享