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;
        }
    };
    
  • 相关阅读:
    LeetCode Find Duplicate File in System
    LeetCode 681. Next Closest Time
    LeetCode 678. Valid Parenthesis String
    LeetCode 616. Add Bold Tag in String
    LeetCode 639. Decode Ways II
    LeetCode 536. Construct Binary Tree from String
    LeetCode 539. Minimum Time Difference
    LeetCode 635. Design Log Storage System
    LeetCode Split Concatenated Strings
    LeetCode 696. Count Binary Substrings
  • 原文地址:https://www.cnblogs.com/dacc123/p/13273869.html
Copyright © 2011-2022 走看看