【Leetcode第216场周赛】score:18 Time: 1:06:18 Rank:448/3856

今天这次周赛是手速场,技巧性不是很强
5605. 检查两个字符串数组是否相等(3分,通过率:2853/3210)
给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false 。

数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。

class Solution:
    def arrayStringsAreEqual(self, word1: List[str], word2: List[str]) -> bool:
        return "".join(word1) == "".join(word2)

5606. 具有给定数值的最小字符串(4分,通过率:2137/4071)
贪心算法

class Solution:
    def getSmallestString(self, n: int, k: int) -> str:
        ans = ""
        k-=n
        while(k>0):
            if k>=25:
                k-=25
                ans += "z"
            else:
                ans += chr(ord("a")+k)
                k = 0
            n -= 1
        while n:
            ans += "a"
            n-= 1
        return ans[::-1]

5607. 生成平衡数组的方案数(5分,通过率:1621/3664)
前缀和,将字符串分割为3部分,当断点一步一步后移时,前半部奇偶性不变,后半部分奇偶性反转

class Solution:
    def waysToMakeFair(self, nums: List[int]) -> int:
        len_ = len(nums)
        if len_ == 1:
            return 1

        j_,o_ = 0,0
        o = sum(nums[1:len_:2])
        j = sum(nums[2:len_:2])
        ans = 0 if j^o else 1
        
        for i in range(1,len_):
            if i&1:
                o -= nums[i]
                o_ += nums[i-1]
            else:
                j -= nums[i]
                j_ += nums[i-1]
            if not (j_+j)^(o_+o):
                ans +=1

        return ans

5608. 完成所有任务的最少初始能量(6分,通过率:959/1979)
本题的局部最优解就是全局最优解,因此每次只需选择某个task,使余下的能量最少即可

class Solution:
    def minimumEffort(self, tasks: List[List[int]]) -> int:
        tasks.sort(key=lambda x:x[1]-x[0])
        ans = 0
        for i in tasks:
            ans = max(i[1],ans+i[0])
        return ans
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值