Gas Station
2014-01-05 20:27
127 查看
这个问题网上的最简单版本的确是简单的一塌糊涂,O(n)的复杂度,我们来理一理这种简单的思路。
假设A的每个月的工资和花费是固定的,而且每年都是不变。如果到了第 i 个月发现自己的积蓄不足以满足花费的时候,当然这日子就没法过了。现在A要交个女朋友,但交女朋友有条件,必须在他们认识后的第一个九月份买个苹果5土豪金,我们帮他看下,以他的工资和花费情况,在几月份开始交女朋友,能够保证满足女友的要求,抱的佳人归。
假设A在一月份认识了个女孩,最终发现自己能活到九月就已经很勉强了,更别说金了,所以A在今年的九月份之前的任何一个月交女友都不行,为何,因为每个月至少收支平衡才能到下个月,所以既然坚持到九月份了,说明这期间的每个月的所剩都不是负的,那么少了任何一个月 i,最终的积蓄都少了,就更买不起了。所以只能在九月份以后的月份开始认识女孩才有可能,当然A最希望在下个月 10月份就认识,因为10月份是潜在的可能性。以便下一年的九月份能买的起。当然如果转一圈都发现买不起,那就算了,洗洗睡吧哥们,只能帮你到这了。
程序中的total就是全年的收支情况,若资不抵债,那就怎么开始都没办法了,cur_sum就是到目前为止的情况,若在某个 i 处,该值为负,那起始位置就只能从下个位置开始。
假设A的每个月的工资和花费是固定的,而且每年都是不变。如果到了第 i 个月发现自己的积蓄不足以满足花费的时候,当然这日子就没法过了。现在A要交个女朋友,但交女朋友有条件,必须在他们认识后的第一个九月份买个苹果5土豪金,我们帮他看下,以他的工资和花费情况,在几月份开始交女朋友,能够保证满足女友的要求,抱的佳人归。
假设A在一月份认识了个女孩,最终发现自己能活到九月就已经很勉强了,更别说金了,所以A在今年的九月份之前的任何一个月交女友都不行,为何,因为每个月至少收支平衡才能到下个月,所以既然坚持到九月份了,说明这期间的每个月的所剩都不是负的,那么少了任何一个月 i,最终的积蓄都少了,就更买不起了。所以只能在九月份以后的月份开始认识女孩才有可能,当然A最希望在下个月 10月份就认识,因为10月份是潜在的可能性。以便下一年的九月份能买的起。当然如果转一圈都发现买不起,那就算了,洗洗睡吧哥们,只能帮你到这了。
class Solution { public: int canCompleteCircuit(vector<int> &gas, vector<int> &cost) { if(gas.size() == 0) return -1; int total = 0; int cur_sum = 0; int start_po = 0; for(int i = 0; i < gas.size(); ++i) { cur_sum += gas[i] - cost[i]; total += gas[i] - cost[i]; if(cur_sum < 0){ cur_sum = 0; start_po = i + 1; } } if(total < 0) return -1; return start_po; } };
程序中的total就是全年的收支情况,若资不抵债,那就怎么开始都没办法了,cur_sum就是到目前为止的情况,若在某个 i 处,该值为负,那起始位置就只能从下个位置开始。
相关文章推荐
- LeetCode之Gas Station
- leetcode 139: Gas Station
- Gas Station
- 134. Gas Station
- Gas Station
- [leetcode] Gas Station
- Gas Station
- pat1072. Gas Station
- Gas Station
- 【leetcode刷题笔记】Gas Station
- Gas Station
- PAT 1072. Gas Station
- Gas Station
- [leetcode]Gas Station
- Gas Station
- 134. Gas Station
- Gas Station
- Gas Station
- Gas Station
- Gas Station