Gas Station
来源:互联网 发布:阿里云账号注销 编辑:程序博客网 时间:2024/05/17 06:09
定义:diff[i] = gas[i] – cost[i] 0<=i <n
这题包含两个问题:
1. 能否在环上绕一圈?2. 如果能,这个起点在哪里?
第一个问题,如果最后∑diff[i]是正值,那么肯定存在这么一个起始点。如果是负值,那说明,油的损耗大于油的供给,不可能有解。
对于第二个问题:
假设,我们从环上取一个区间[i, j], j>i, 然后对于这个区间的diff加和,定义
sum[i,j] = ∑diff[k] where i<=k<j
如果sum[i,j]小于0,那么这个起点肯定不为i,跟第一个问题的原理一样。举个例子,假设x是[0,n]的解,那么我们知道 任意sum[k,x-1] (0<=k<x-1) 肯定是小于0的,否则解就应该是k。同理,sum[x,n]一定是大于0的,否则,解就不应该是x,而是x和n之间的某个点。所以第二题的答案,其实就是在0到n之间,找到第一个连续子序列大于0的。
int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {int len = gas.size();vector<int> diff(gas.size());for (int i = 0; i<len; i++) {diff[i] = gas[i] - cost[i];}int startnode = 0;int tank = 0;int sum = 0;for (int i = 0; i<len; i++) {tank += diff[i];sum += diff[i];if (sum<0) {sum = 0;startnode = i + 1;}}if (tank<0)return -1;elsereturn startnode;}
0 0
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station
- 定时作业-二叉树的建立与遍历
- 常量
- 广度优先搜索——水杯倒水问题
- Android之ListView原理学习与优化总结
- hibernate配置文件hibernate.cfg.xml的详细解释
- Gas Station
- 插入排序之希尔(shell)排序
- 【原创】二叉树的建立与遍历(前序遍历、中序遍历、后序遍历)
- comparator接口与Comparable接口的区别
- 运算符
- hihocoder #1050 树中的最长路
- 建立全局和局部对象时,不同的构造函数和析构函数的调用顺序
- 动归
- mac上mysql数据库读取数据中文乱码问题