本文主要是介绍[力扣题解]134. 加油站,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:134. 加油站
思路
贪心法;
代码
暴力法
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int i, rest, index, size;size = gas.size();for(i = 0; i < size; i++){// 从 i 开始// 油量储备rest = gas[i] - cost[i];index = (i + 1) % size;// 有油且未到达终点while(rest > 0 && index != i){rest = rest + gas[index] - cost[index];index = (index + 1) % size;}if(rest >= 0 && index == i){return i;}}return -1;}
};
本题应该设置了时长限制,所以暴力法超时了;
贪心 Method 1
// 代码随想录: 贪心 Method 1
//
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int curSum = 0;int min = INT_MAX; // 从起点出发,邮箱里的油量最小值int i, rest;for(i = 0; i < gas.size(); i++){cout << "i : " << i;rest = gas[i] - cost[i]; // 这一天剩下的油curSum += rest; // 现在的油cout << ", curSum : " << curSum;if(curSum < min){min = curSum;}}// 情况1:跑不了一圈if(curSum < 0){return -1; }// 情况2:if(min >= 0){return 0;}for(i = gas.size()-1; i >= 0; i--){rest = gas[i] - cost[i];min += rest;if(min >= 0){return i;}}return -1;}
};
贪心 Method 2
// 贪心 Method 2
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int i;int totalsum = 0, cursum = 0, start = 0;for(i = 0; i < gas.size(); i++){cout << ", i : " << i;cursum += gas[i] - cost[i];totalsum += gas[i] - cost[i];cout << ", cursum : " << cursum;// 没油了, 重来if(cursum < 0){start = i+1; // 题目条件有“如果有解存在唯一解”cursum = 0;cout << ", start : " << start;}cout << endl;}// 没戏了if(totalsum < 0){return -1;}return start;}
};
看不懂代码的时候,就手动输出调试;(像上面那样)
这篇关于[力扣题解]134. 加油站的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!