LeetCode 第 69 场双周赛总结

5960. 将标题首字母大写

这是我写的:执行用时: 36 ms,内存消耗: 15.1 MB

class Solution:
    def capitalizeTitle(self, title: str) -> str:
        titles = title.split(' ')
        for i in range(len(titles)):
            t = titles[i]
            if len(t) <= 2:
                titles[i] = t.lower()
            else:
                titles[i] = t.capitalize()
        return " ".join(titles)

一行代码:执行用时: 36 ms,内存消耗: 15.1 MB

class Solution:
    def checkString(self, s: str) -> bool:
        return ' '.join([w.capitalize() if len(w) > 2 else w.lower() for w in title.split()])

5961. 链表最大孪生和

这是我写的:执行用时: 764 ms,内存消耗: 55.9 MB

class Solution:
    def pairSum(self, head: Optional[ListNode]) -> int:
        arr = []
        while head:
            arr.append(head.val)
            head = head.next
        n = len(arr)
        ar = arr[:n//2]
        for i in range(n // 2):
            ar[i] += arr[n-i-1]
        return max(ar)

5962. 连接两字母单词得到的最长回文串

我写的:执行用时: 264 ms,内存消耗: 32 MB

class Solution:
    def longestPalindrome(self, words: List[str]) -> int:
        flag = False
        res = 0
        dict = {}
        for word in words:
            nw = word[1] + word[0]
            if nw in dict and dict[nw] > 0:
                dict[nw] -= 1
                res += 2
            else:
                if word in dict:
                    dict[word] += 1
                else:
                    dict[word] = 1
        for key in dict.keys():
            if dict[key] == 1 and key[0] == key[1]:
                res += 1
                break
        return res*2

5931. 用邮票贴满网格图

大佬写的:执行用时: 1144 ms,内存消耗: 47.2 MB

class Solution:
    def possibleToStamp(self, grid: List[List[int]], stampHeight: int, stampWidth: int) -> bool:
        m, n = len(grid), len(grid[0])
        sum = [[0] * (n + 1) for _ in range(m + 1)]
        diff = [[0] * (n + 1) for _ in range(m + 1)]
        for i, row in enumerate(grid):
            for j, v in enumerate(row):  # grid 的二维前缀和
                sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + v

        for i, row in enumerate(grid):
            for j, v in enumerate(row):
                if v == 0:
                    x, y = i + stampHeight, j + stampWidth  # 注意这是矩形右下角横纵坐标都 +1 后的位置
                    if x <= m and y <= n and sum[x][y] - sum[x][j] - sum[i][y] + sum[i][j] == 0:
                        diff[i][j] += 1
                        diff[i][y] -= 1
                        diff[x][j] -= 1
                        diff[x][y] += 1  # 更新二维差分

        # 还原二维差分矩阵对应的计数矩阵,这里用滚动数组实现
        cnt, pre = [0] * (n + 1), [0] * (n + 1)
        for i, row in enumerate(grid):
            for j, v in enumerate(row):
                cnt[j + 1] = cnt[j] + pre[j + 1] - pre[j] + diff[i][j]
                if cnt[j + 1] == 0 and v == 0:
                    return False
            cnt, pre = pre, cnt
        return True
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值