LeetCode #321: Create Maximum Number
来源:互联网 发布:算法导论 pdf下载 编辑:程序博客网 时间:2024/06/06 03:31
Problem Statement
(Source) Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum number of length k <= m + n from digits of the two. The relative order of the digits from the same array must be preserved. Return an array of the k digits. 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 = 5return [9, 8, 6, 5, 3]Example 2:nums1 = [6, 7]nums2 = [6, 0, 4]k = 5return [6, 7, 6, 0, 4]Example 3:nums1 = [3, 9]nums2 = [8, 9]k = 3return [9, 8, 9]
Analysis
Solve two simpler problems first:
(1) Create the maximum number from only one array.
(2) Create the maximum number from both arrays using all their elements.
Tags: Greedy
.
Solution
from collections import dequeclass Solution(object): def maxNumber(self, nums1, nums2, k): """ :type nums1: List[int] :type nums2: List[int] :type k: int :rtype: List[int] """ res = [] for i in xrange(max(0, k - len(nums2)), min(k, len(nums1)) + 1): res = max(res, self.merge(self.maxNum(nums1, i), self.maxNum(nums2, k - i))) return res def maxNum(self, nums, k): """Get the maximum number that can be obtained from one array. """ sta = deque() n = len(nums) for i in xrange(n): while sta and sta[-1] < nums[i] and len(sta) + n - i - 1 >= k: sta.pop() if len(sta) < k: sta.append(nums[i]) return list(sta) def merge(self, nums1, nums2): """Merge two arrays into one. """ m, n = len(nums1), len(nums2) res = [max(nums1, nums2).pop(0) for _ in xrange(m + n)] return res
References
(1) http://www.cnblogs.com/CarryPotMan/p/5384172.html
1 0
- leetcode 321: Create Maximum Number
- LeetCode #321: Create Maximum Number
- LeetCode(321)Create Maximum Number
- leetcode Create Maximum Number
- Create Maximum Number | LeetCode
- leetcode Create Maximum Number
- LeetCode Create Maximum Number
- leetcode - Create Maximum Number
- [LeetCode] Create Maximum Number
- [LeetCode] Create Maximum Number
- leetcode:greedy:Create Maximum Number(321)
- Leetcode 321 - Create Maximum Number(贪心)
- leetcode 321. Create Maximum Number
- LeetCode 321. Create Maximum Number
- LeetCode-321. Create Maximum Number
- leetcode笔记--Create Maximum Number
- leetcode.321. Create Maximum Number
- [LeetCode]321. Create Maximum Number
- windows 10下安装pip
- css设置特殊字体
- zz HttpClient 对 cookie的处理
- maven+tomcat打包,test单元测试报错问题
- [CSU 1812 三角形和矩形] 计算几何
- LeetCode #321: Create Maximum Number
- Junit4的关键技术相关资料网址
- ElasticSearch中Date
- PTA 4-10 阶乘计算升级版 (20分)
- Apache的AB测试
- 使用七牛上传文件抛出异常问题
- Java 产生 UUID / GUID
- mysql的主从配置
- yarn分布式(HA)