一、题目
二、代码
class Solution
{
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost)
{
int return_num=-1;
int i,j;
int all_gas=0;
int all_cost=0;
vector<int> difference;
int temp_sum=0;
for(i=0;i<gas.size();i++) all_gas+=gas[i];
for(i=0;i<cost.size();i++) all_cost+=cost[i];
// std::cout<<"all_gas "<<all_gas<<std::endl;
// std::cout<<"all_cost "<<all_cost<<std::endl;
if(all_cost>all_gas)
{
}
else
{
for(i=0;i<gas.size();i++) difference.push_back(gas[i]-cost[i]);
//for(i=0;i<difference.size();i++) std::cout<<" "<<difference[i];
//std::cout<<std::endl;
//如果 从i到j累加 difference值为负数 那么起始点一定是从j+1开始 这就是局部最优
return_num=0;
for(i=0;i<difference.size();i++)
{
temp_sum+=difference[i];
if(temp_sum<0)
{
temp_sum=0;
return_num=i+1;
}
}
//if(return_num>difference.size()-1) return_num=-1; 经过试验 这一句可以不加 但没有理论证明
}
return return_num;
}
};