麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

Leetcode 321 - Create Maximum Number(貪心)

2019-11-10 19:14:34
字體:
來源:轉載
供稿:網友

題意

給兩個數組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; }};
上一篇:面向過程(3)

下一篇:poj1517

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲午夜天堂吃瓜在线 | 性欧美一区二区 | 国产精品福利一区 | 日本精品视频一区二区三区四区 | 黄在线免费看 | 中文字幕 日本 | 欧美成人精品h版在线观看 久久久久久三区 | 天天色宗合| 免费a级毛片大学生免费观看 | 精品久久久久久亚洲精品 | 激情久久免费视频 | 制服丝袜日日夜夜 | 久久不射电影网 | 国产精品久久久av | 性欧美在线视频 | 色妞视频男女视频 | 久久国产精品二区 | 可以看逼的视频 | 日本一级黄色大片 | 国产日韩久久久久69影院 | 成人毛片免费在线 | 国产成人高清在线观看 | 嫩草影院在线观看网站成人 | 亚洲婷婷日日综合婷婷噜噜噜 | 极品五月天 | 成人超碰97 | 国产精品一区99 | 香蕉国产在线视频 | 亚洲国产高清自拍 | 久久久久久久免费看 | 久久国产精品久久久久久 | 久久99精品久久久久久小说 | 日韩视频一区二区在线观看 | 欧美一级片在线 | 成人在线观看免费爱爱 | 欧美精品激情在线 | 视频一区二区视频 | 高清av免费| 亚洲成人精品久久久 | 中文字幕国产一区 | 亚洲第五色综合网 |