8.19 - hard - 65

321. Create Maximum Number

这题的想法其实比较简单。首先分情况,针对两个数组取k个数,可能的取法是0 k, 1 k-1, 2, k-2 ..., k 0. 针对于每一种取法求出其最大值。

求上面情况的最大值的时候就是比如说在array里取n个数形成最大值也就是从length-n中取一个,然后从index,到length-n-1中取一个,然后依次取就可以了。

class Solution(object):
    def maxNumber(self, nums1, nums2, k):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :type k: int
        :rtype: List[int]
        """
        n, m= len(nums1),len(nums2)
        ret = [0] * k
        for i in range(0, k+1):
            j = k - i
            if i > n or j > m: continue
            left = self.maxSingleNumber(nums1, i)
            right = self.maxSingleNumber(nums2, j)
            num = self.mergeMax(left, right)
            ret = max(num, ret)
        return ret


    def mergeMax(self, nums1, nums2):
        ans = []
        while nums1 or nums2:
            if nums1 > nums2:
                ans += nums1[0],
                nums1 = nums1[1:]
            else:
                ans += nums2[0],
                nums2 = nums2[1:]
        return ans

    def maxSingleNumber(self, nums, selects):
        n = len(nums)
        ret = [-1]
        if selects > n : return ret
        while selects > 0:
            start = ret[-1] + 1 #search start
            end = n-selects + 1 #search end
            ret.append( max(range(start, end), key = nums.__getitem__))
            selects -= 1
        ret = [nums[item] for item in ret[1:]]
        return ret
        
        
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 9,705评论 0 16
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 18,066评论 2 36
  • 该书以走心、妥贴且青春的表述方式讲述了马克思的一生及思想理论精髓,让年轻读者们穿越时空,与一个有血有肉有灵、与九...
    校校不说话阅读 4,179评论 0 0
  • 今天又是我们大家庭的一次聚会,通常一聚就是一天,我们会在一起吃饭,饭后大人们会聊天、玩麻将,孩子们叽叽喳喳的小声音...
    令宜阅读 3,486评论 0 0