zoukankan      html  css  js  c++  java
  • LeetCode 321. Create Maximum Number

    题目

    动态规划

    class Solution {
    public:
        string dp1[100005];
        string _dp1[100005];
        string dp2[100005];
        string bp1[100005];
        string _bp1[100005];
        string bp2[100005];
        vector<int> maxNumber(vector<int>& nums1, vector<int>& nums2, int k) {
            
            int n = nums1.size();
            int m = nums2.size();
            
            dp2[0]="";
            for(int i=1;i<=n&&i<=k;i++)
            {
                dp2[i]="";
                for(int j=n-1;j>=0;j--)
                {
                    dp1[j]="";
                    if(j>n-i)
                    {
                        continue;
                    }
                    char x = '0'+nums1[j];
                    dp1[j] = max(dp1[j+1],x+_dp1[j+1]);
                    dp2[i]= max(dp2[i],dp1[j]);
                }
                
                for(int j=0;j<=n-1;j++)
                {
                    _dp1[j]=dp1[j];
                }
            }
            
            bp2[0]="";
            for(int i=1;i<=m&&i<=k;i++)
            {
                bp2[i]="";
                for(int j=m-1;j>=0;j--)
                {
                    bp1[j]="";
                    if(j>m-i)
                    {
                        continue;
                    }
                    char x = '0' +nums2[j];
                    bp1[j] = max(bp1[j+1],x+_bp1[j+1]);
                    bp2[i]=max(bp2[i],bp1[j]);
                }
                
                for(int j=0;j<=m-1;j++)
                {
                    _bp1[j]=bp1[j];
                }
            }
            
            string ans="";
            for(int i=0;i<=k;i++)
            {
                string x = dp2[i];
                string y = bp2[k-i];
                
                string str="";
                int p=0;
                int q=0;
                while(p<x.length()||q<y.length())
                {
                    if(p<x.length()&&q<y.length()&&x[p]>y[q])
                    {
                        str+=x[p];
                        p++;
                        continue;
                    }
                    
                    if(p<x.length()&&q<y.length()&&x[p]<y[q])
                    {
                        str+=y[q];
                        q++;
                        continue;
                    }
                    
                    if(p<x.length()&&q<y.length()&&x[p]==y[q])
                    {
                        int p1=p;
                        int q1=q;
                        
                        int tag=0;
                        while(p1<x.length()||q1<y.length())
                        { 
                            if(x[p1]<y[q1])
                            {
                                tag=1;
                                break;
                            }
                            
                            if(x[p1]>y[q1])
                            {
                                tag=0;
                                break;
                            }
                            
                            if(p1==x.length()-1&&q1==y.length()-1)
                            {
                                tag=0;
                                break;
                            }
                            
                            if(p1<x.length()-1)
                                p1++;
                            if(q1<y.length()-1)
                                q1++;
                        }
                        if(tag==0)
                        {
                            str+=x[p];
                            p++;
                        }
                        else
                        {
                            str+=y[q];
                            q++;
                        }
                        continue;
                    }
                    
                    if(p<x.length())
                    {
                        str+=x[p];
                        p++;
                        continue;
                    }
                     if(q<y.length())
                     {
                        str+=y[q];
                         q++;
                     }
                }
               
                if(ans.length()<str.length())
                {
                    ans = str;
                }
                else if(ans.length()==str.length())
                {
                    ans=max(ans,str);
                }    
                
            }
            
            
            vector<int> res;
            for(int i=0;i<ans.length();i++)
            {
                res.push_back(ans[i]-'0');
            }
            
            return res;
        }
    };
    
  • 相关阅读:
    vue create is a Vue CLI 3 only command and you are using Vue CLI 2.9.6. You
    Vue2.x是怎么收集依赖的
    只绑定一次事件的简单方法
    Proxy是怎么做数据劫持的
    使用babel进行打包
    使用npm link进行模块调试
    Webpack 热加载插件的实现原理
    Vue 服务端渲染的数据流
    Vue的生命周期钩子
    Linux定时任务
  • 原文地址:https://www.cnblogs.com/dacc123/p/13273869.html
Copyright © 2011-2022 走看看