class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param grass int整型vector * @param cost int整型vector * @return int整型 */ int can_complete_circuit(vector<int>& grass, vector<int>& cost) { // write code here int n = grass.size(); int sum1 = 0, sum2 = 0; for (int i = 0; i < n; ++i) { sum1 += grass[i]; sum2 += cost[i]; } if (sum1 - sum2 < 0) return -1; int ans = 0, cnt = 0; for (int i = 0; i < n; ++i) { ans += grass[i] - cost[i]; if (ans < 0) { cnt = i + 1; ans = 0; } } return cnt + 1; } };
一、题目考察的知识点
贪心
二、题目解答方法的文字分析
首先要明确如果草料的总和比消耗要少,那肯定是不能走的,所以计算一下两者之差,看看是否小于0
排除上述的可能之后就继续遍历,如果当前这一步的前缀和小于0,那么就是不满足要求,就继续遍历下一个
三、本题解析所用的编程语言
c++