leetcode.321. Create Maximum Number
2016-05-25 12:48
351 查看
Given two arrays of length
Example 1:
nums1 =
nums2 =
k =
return
Example 2:
nums1 =
nums2 =
k =
return
Example 3:
nums1 =
nums2 =
k =
return
mand
nwith digits
0-9representing two numbers. Create the maximum number of length
k <= m + nfrom digits of the two. The relative order of the digits from the same array must be preserved. Return an array of the
kdigits. You should try to optimize your time and space complexity.
Example 1:
nums1 =
[3, 4, 6, 5]
nums2 =
[9, 1, 2, 5, 8, 3]
k =
5
return
[9, 8, 6, 5, 3]
Example 2:
nums1 =
[6, 7]
nums2 =
[6, 0, 4]
k =
5
return
[6, 7, 6, 0, 4]
Example 3:
nums1 =
[3, 9]
nums2 =
[8, 9]
k =
3
return
[9, 8, 9]
class Solution { public: vector<int> maxNumber(vector<int>& nums1, vector<int>& nums2, int k) { int size1 = nums1.size(); int size2 = nums2.size(); vector<int> res(k); vector<int> tmp(k); for (int i = 0; i <= k; i++) { if (k - i > size2) continue; if (i > size1) break; vector<int> num1; vector<int> num2; num1 = getnum(nums1, i); num2 = getnum(nums2, k - i); tmp = mergenum(num1, num2); res = cmp(res, tmp); } return res; } vector<int> getnum(vector<int>& num, int n) { vector<int> vec; int drop = num.size()-n; for(int i =0; i< num.size(); i++) { while(drop >0 && vec.size() && num[i] > vec.back()) { drop--; vec.pop_back(); } vec.push_back(num[i]); } vec.resize(n); return vec; } vector<int> mergenum(vector<int> & num1, vector<int> & num2) { vector<int> vec; while(num1.size() + num2.size() > 0) { vector<int>& tem = num1>num2?num1:num2; vec.push_back(tem[0]); tem.erase(tem.begin()); } return vec; } vector<int> cmp(vector<int> & num1, vector<int> & num2) { int i = 0; int j = 0; while (i < num1.size() && j < num2.size()) { if (num1[i]>num2[j]) return num1; if (num1[i] < num2[j]) return num2; i++; j++; } return num1; } };
相关文章推荐
- C++第6次上机实验-【项目2:数组合并】
- 迪米特法则
- 【转】PHP ob_start() 函数介绍
- java1.8函数式接口
- 在 isilon 中使用 ldap 登录 ftp 服务
- Linux性能实时监测工具 Netdata
- yii2实现根据时间搜索的方法
- memcached的简单配置
- Ubuntu下的文件比较工具--meld
- testng + reportng 测试结果邮件发送
- 现在有100个标记过的电灯泡。第一个人经过这些灯时,点亮所有的灯,第二个人经过时每隔一盏灯就切换开关一次,第三个人经过时每隔两盏灯切换开关一次。请问,当第100个人经过时,还剩多少盏亮着的灯?
- 【蓝桥杯】连续奇数和
- 《Linux大棚》博客
- bootstrap的ajax提交
- poj 3104 二分枚举答案,最值问题转化为判定性问题
- Android 键盘属性
- NoSQL 数据库
- 【GDOI2014模拟】Pty爬山
- 【转】apache/php 开启 gzip压缩
- GNU bash实现机制与源代码简析