题解 | #大胃王牛牛#

大胃王牛牛

https://www.nowcoder.com/practice/4e55777e218b4850928d054a8cddaf50

知识点

模拟,贪心

思路

假设grass和cost的长度为n 首先,我们预处理出grass和cost的差s,若s[0~n-1]<0,那必然无解,否则必然有解。

设sum为区间[ans~~n-1]的和 判断完有解后,我们只需要找到一个下标最小的点,使其一直向右遍历,维护sum=sum+s[i],若sum<0,则需要更新起点下标了。否则,若存在一个点i,使sum[i~n-1]都大于0,那ans即为i+1(下标为0的地方是第一个)

代码c++

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 sum=0;
        int s[10005];
        int n=grass.size();
        for(int i=0;i<n;i++)
        {
            s[i]=grass[i]-cost[i];
            sum+=s[i];
        }
        if(sum<0)return -1;
        int ans=0;
        sum=0;
         for(int i=0;i<n;i++)
         {  
            sum+=s[i];
            if(sum<0)
            {
                ans=i+1;
                sum=0;
            }
         }
         return ans+1;

    }
};
全部评论

相关推荐

找个工作&nbsp;学历是要卡的&nbsp;要求是高的&nbsp;技能不足是真的&nbsp;实习经验是0的&nbsp;简历无处可写是事实的&nbsp;钱不好赚是真的&nbsp;想躺平又不敢躺&nbsp;也不甘心躺&nbsp;怕自己的灵感和才华被掩埋甚至从未被自己发现&nbsp;又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务