ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode笔记:Biweekly Contest 71

2022-02-06 16:33:10  阅读:253  来源: 互联网

标签:digits 题目 nums int res 代码 71 Biweekly LeetCode


1. 题目一

给出题目一的试题链接如下:

1. 解题思路

这一题由于可以允许0在开头的情况,因此整体思路上还是比较简单的,只需要把4个数字取出来,然后把两个较小的数字放在十位数上,剩下的两个较大的数字放在个位数上即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minimumSum(self, num: int) -> int:
        digits = []
        while num != 0:
            digits.append(num % 10)
            num = num // 10
        digits = sorted(digits)
        return 10*sum(digits[:2]) + sum(digits[2:])

提交代码评测得到:耗时43ms,占用内存13.8MB。

2. 题目二

给出题目二的试题链接如下:

1. 解题思路

这一题我的思路比较暴力就是了,直接把数据根据pivot分成三堆,然后重新组合即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def pivotArray(self, nums: List[int], pivot: int) -> List[int]:
        less = [x for x in nums if x < pivot]
        equal = [x for x in nums if x == pivot]
        large = [x for x in nums if x > pivot]
        return less + equal + large

提交代码评测得到:耗时2373ms,占用内存31.6MB。

3. 题目三

给出题目三的试题链接如下:

1. 解题思路

这一题其实比较直接,按照题意进行计算即可,唯一需要注意的是,由于秒钟可以达到99,因此有的时间可以有多种设置方式,需要比较一下两者的大小。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minCostSetTime(self, startAt: int, moveCost: int, pushCost: int, targetSeconds: int) -> int:
        minute, second = targetSeconds // 60, targetSeconds % 60
        def get_cost(minute, second):
            digits = (f"{minute:02d}" + f"{second:02d}").lstrip("0")
            res, pre = 0, str(startAt)
            for ch in digits:
                res += pushCost
                if ch != pre:
                    res += moveCost
                pre = ch
            return res
        
        res = get_cost(minute, second) if minute < 100 else math.inf
        if minute > 0 and second + 60 < 100:
            res = min(res, get_cost(minute-1, second+60))
        return res

提交代码评测得到:耗时59ms,占用内存13.9MB。

4. 题目四

给出题目四的试题链接如下:

1. 解题思路

这一题的思路其实就是在中段选择一个分隔点,左侧选取n个最小的元素,右侧选取n个最大的元素,然后求差值即可。

因此,我们就是遍历中段的分隔点,然后分别统计左右的前n个最大或者最小的元素之和,然后进行求差即可。而前者这个数组的维护则可以通过堆排进行高效的实现。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minimumDifference(self, nums: List[int]) -> int:
        n = len(nums) // 3
        left = [-x for x in nums[:n]]
        right = nums[-n:]
        ls, rs = sum(left), sum(right)
        heapq.heapify(left)
        heapq.heapify(right)
        
        cnt = [[ls, rs] for _ in range(n+1)]
        for i in range(n):
            heapq.heappush(left, -nums[n+i])
            lpop = heapq.heappop(left)
            cnt[i+1][0] = cnt[i][0] - nums[n+i] - lpop
            
            heapq.heappush(right, nums[2*n-1-i])
            rpop = heapq.heappop(right)
            cnt[n-1-i][1] = cnt[n-i][1] + nums[2*n-1-i] - rpop
        return -max(sum(x) for x in cnt)         

提交代码评测得到:耗时3545ms,占用内存46.3MB。

标签:digits,题目,nums,int,res,代码,71,Biweekly,LeetCode
来源: https://blog.csdn.net/codename_cys/article/details/122799172

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有