leetcode 321: Create Maximum Number

来源:互联网 发布:淘宝修图多少钱一张 编辑:程序博客网 时间:2024/06/12 21:30

The algorithm is quite difficult, you need to think step by step to come up with the idea. I learned the algorithm here.

class Solution {public:    vector<int> maxNumber(vector<int>& nums1, vector<int>& nums2, int k) {        vector<int> res;        int size1=nums1.size();        int size2=nums2.size();        for(int i=max(0,k-size2);i<=k&&i<=size1;i++)        {            vector<int> temp=merge(maxArray(nums1,i),maxArray(nums2,k-i),k);            if(greater(temp,0,res,0))                res=temp;        }        return res;    }    vector<int> maxArray(vector<int>& num,int k)    {        vector<int> res;        for(int i=0;i<num.size();i++)        {            while(num.size()-i+res.size()>k&&!res.empty()&&num[i]>res.back())                res.pop_back();            if(res.size()<k)                res.push_back(num[i]);        }        return res;    }    vector<int> merge(vector<int> nums1,vector<int> nums2,int k)    {        vector<int> res;        int i=0,j=0;        while(res.size()<k)            res.push_back(greater(nums1,i,nums2,j)?nums1[i++]:nums2[j++]);        return res;    }    bool greater(vector<int>& nums1,int i,vector<int>& nums2,int j)    {        while(i<nums1.size()&&j<nums2.size()&&nums1[i]==nums2[j])        {            i++;            j++;        }        return j==nums2.size()||(i<nums1.size()&&nums1[i]>nums2[j]);    }};


0 0