力扣321.拼接最大数
-
分成两个子问题 —— 求数组去除s个数的最大数
- 再归并求最大
- lexicographical_compare(begin1,end1,begin2,end2) 根据字典序比较两数组(字符串)大小
-
class Solution {public:vector<int> maxNumber(vector<int>& nums1, vector<int>& nums2, int k) {vector<int> res(k,0);int n = nums1.size() , m = nums2.size();for(int s=max(0,k-m);s<=min(k,n);s++){vector<int> temp;int i = 0, j =0;vector<int> temp1 = makMax(nums1,s);vector<int> temp2 = makMax(nums2,k - s);auto iter1 = temp1.begin() , iter2 = temp2.begin();while(iter1 != temp1.end() || iter2 != temp2.end())temp.push_back(lexicographical_compare(iter1, temp1.end(), iter2, temp2.end()) ? *iter2++ : *iter1++);res = lexicographical_compare(res.begin(), res.end(), temp.begin(), temp.end()) ? temp : res;}return res;}vector<int> makMax(vector<int> v, int k){int n = v.size();if (n <= k)return v;vector<int> res;int pop = n-k;for (int i=0; i<n; i++){while(!res.empty() && v[i]>res.back() && pop-->0)res.pop_back();res.push_back(v[i]);}res.resize(k);return res;}};