大鱼吃小鱼

题解

第一种解法:我直接从右到左一轮一轮模拟可不可以?
当然是不可以的,有一种数据会直接卡死你,n,1,2,3,4,5,6,7,8....n-1。
时间复杂度直接变成

正确解法:
单调栈
我们发现一轮一轮扫,我们浪费了很多次已知的信息。
我们研究一下规律可以发现:
对于一条鱼而言,只会被左边的鱼吃掉。
那么它被吃的时间是不是应该是
左边比自己小的鱼的集合里面 被吃时间最大的+1
那么我们就可以考虑去维护一个单调递增的栈,去求每条鱼被吃的时间
那么所有鱼被吃时间最大的那个就是我们的鱼的总数不会变的答案

时间复杂度O(n)
空间复杂度O(n)

代码

class Solution {
public:
    /**
     *
     * @param N int整型 N条鱼
     * @param A int整型vector 每条鱼的体积为Ai
     * @return int整型

    int solve(int N, vector<int>& A) {
        // write code here
        int f[100005];
        stack<int>s;
        int ans=0;
        for (int i=0; i<N; i++)
        {
            int maxn=0;
            if (s.size()==0)
            {
                s.push(A[i]); continue;
            }
            while (s.size()!=0 && s.top()<A[i])
            {
                maxn=max(maxn,f[s.top()]);
                s.pop();
            }
            s.push(A[i]);
            if (s.size()==1) continue;

            f[A[i]]=maxn+1;
            ans=max(ans,f[A[i]]);
        }
        return ans;
   }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 11:55
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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