国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Leetcode 321 - Create Maximum Number(貪心)

2019-11-10 17:13:17
字體:
來源:轉載
供稿:網友

題意

給兩個數組nums1和nums2,和一個數字k,要求從nums1里面和nums2里面分別找出一些數字,構成一個新的數字,并且新的數字最大。并且nums1里面取的數字和nums2里面取的數字要保持相對順序不變。

思路

之前做過一道類似的題,只給一個數組,找出k個數,維持相對順序,求能組成的最大的數。

那么,這道題,其實就是說,在nums1里面找出x個,nums2里面找出y個,x + y == k,求能組成的最大的數。

那么,我們就枚舉從nums1里面取i個數(組成最大的數),nums2里面取k - i個數(組成最大的數)。最后歸并即可。

需要注意一下幾點:

找nums1里面由i個能組成的最大的數的時候,我們維護一個單調增的隊列。最后歸并的時候,當指針i和j指向的數相同的時候,還要考慮后續元素的影響

代碼

class Solution {public: vector<int> get(vector<int> nums1, int k) { vector<int> s; if (!k) return s; int re = nums1.size() - k; for (auto x : nums1) { while (re && s.size() && s.back() < x) {re--; s.pop_back();} s.push_back(x); } s.resize(k); return s; } vector<int> merge(vector<int> v1, vector<int> v2) { vector<int> ans; while (v1.size() || v2.size()) { vector<int> &tv = v1 > v2 ? v1 : v2; ans.push_back(tv[0]); tv.erase(tv.begin()); } return ans; } vector<int> maxNumber(vector<int>& nums1, vector<int>& nums2, int k) { vector<int> ans; for (int i = 0; i <= k; i++) { if (i <= nums1.size() && k - i <= nums2.size()) {; vector<int> v1 = get(nums1, i); vector<int> v2 = get(nums2, k - i); ans = max(ans, merge(v1, v2)); } } return ans; }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松桃| 邢台市| 蓬溪县| 石景山区| 泰州市| 娄底市| 绩溪县| 开化县| 平山县| 淮安市| 区。| 彝良县| 麦盖提县| 项城市| 新河县| 青河县| 乌什县| 随州市| 绥芬河市| 柳河县| 比如县| 武功县| 慈溪市| 汝城县| 通渭县| 平陆县| 壤塘县| 建水县| 江口县| 汶川县| 三明市| 同江市| 临汾市| 黔东| 武夷山市| 读书| 西乌珠穆沁旗| 格尔木市| 怀仁县| 巴楚县| 田东县|