334. Increasing Triplet Subsequence

来源:互联网 发布:购买域名以后怎么使用 编辑:程序博客网 时间:2024/05/16 10:25

正常DP代码,但是在一个实例上超时了,==,要去找找可以节约时间的方法了。

class Solution {public:    bool increasingTriplet(vector<int>& nums) {        if(nums.size()<=2)            return false;        vector<int> dp(nums.size(),1);        for(int i=nums.size()-2;i>=0;i--)        {            for(int j=i+1;j<nums.size();j++)            {                if(nums[i]<nums[j])                    dp[i]=max(dp[i],1+dp[j]);            }            if(dp[i]>=3)                return true;        }        return false;    }};

最终AC代码,我的天那,提交了5次,终于AC了。。。。艰辛,中间遇到各种问题。比如int超范围啦。。。但是看提交结果差强人意啊,是要看看discuss了。

class Solution {public:    bool increasingTriplet(vector<int>& nums) {        if(nums.size()<=2)            return false;        multimap<int,int> count;        count.insert(std::pair<int,int>(nums.back(),nums.size()-1));        vector<int> dp(nums.size(),1);        for(int i=nums.size()-2;i>=0;i--)        {            count.insert(std::pair<int,int>(nums[i],i));            for(multimap<int,int>::iterator it=count.lower_bound(nums[i]);it!=count.end();it++)                if(it->first>nums[i])                    dp[i]=max(dp[i],1+dp[it->second]);            if(dp[i]>=3)                return true;        }        return false;    }};

参考discuss,厉害了,原理大神们没有用DP,而是直接用两个元素存储。

class Solution {public:    bool increasingTriplet(vector<int>& nums) {        if(nums.size()<=2)            return false;        int c1=INT_MAX;        int c2=INT_MAX;        for(int i=0;i<nums.size();i++)        {            if(nums[i]<=c1)                c1=nums[i];            else if(nums[i]<=c2)                c2=nums[i];            else                return true;        }        return false;    }};
0 0
原创粉丝点击