LeetCode笔记:Weekly Contest 224 比赛记录

0. 赛后总结

这次的比赛结果而言真的是惨不忍睹,只做出两题,还错了两次,然后排名就真的惨不忍睹了,都没脸说成绩了,唉。。。

后面加油吧。。。

1. 题目一

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

1. 解题思路

这一题没啥说的,每个矩形的短边长就是能切出的最大正方形边长,然后对最大值统计一下频数就是最终的结果了。

2. 代码实现

给出python代码实现如下:

class Solution:
    def countGoodRectangles(self, rectangles: List[List[int]]) -> int:
        d = sorted(min(x) for x in rectangles)
        cnt = Counter(d)
        return cnt[d[-1]]

提交代码评测得到:188ms,占用内存15.1MB。

2. 题目二

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

1. 解题思路

这一题事实上也没啥好说的,由于所有的数都不相同,因此如果两个不同的组合abcd乘积相同时,两者必不会有交叠。

因此,我们只需要统计每一个可能的成绩的组合次数即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def tupleSameProduct(self, nums: List[int]) -> int:
        nums = sorted(nums)
        n = len(nums)
        counter = defaultdict(int)
        for i in range(n-1):
            for j in range(i+1, n):
                counter[nums[i]*nums[j]] += 1
        cnt = 0
        for x in counter.values():
            cnt += x*(x-1) * 4
        return cnt

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

3. 题目三

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

1. 解题思路

这一题算是这次比赛里面做的最为失败的一题吧,因为毫无思路,然后就被虐惨了。

现在也是看了leetcode上面别人写的算法解析才有了思路。

不过看过思路之后发现,这题确实还是蛮简单的,唉。。。

思路其实挺简单的,就是记录下每一行中每一列中的元素往上连续有多少个1,然后对其重新排个序,计算一下其中可能的最大矩阵面积大小即可。

由此得到的算法复杂度就是 O ( M ⋅ N ) O(M\cdot N) O(MN)

2. 代码实现

给出python代码实现如下:

class Solution:
    def largestSubmatrix(self, matrix: List[List[int]]) -> int:
        n, m = len(matrix), len(matrix[0])
        up = [0 for _ in range(m)]
        res = 0
        for i in range(n):
            up = [0 if y == 0 else x+1 for x, y in zip(up, matrix[i])]
            tmp = sorted(up, reverse=True)
            for j in range(m):
                res = max(res, (j+1)*tmp[j])
                if tmp[j]== 0:
                    break
        return res

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

4. 题目四

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

这一题放弃了,想了近一周,依然没有一个好的思路,试过dfs和bfs,前者一直遇到死循环没有debug出来问题,后者答案不对,真的是烦,暂时这里是放弃了,如果有读者有好的思路的话请务必不吝赐教一下,真心感谢,唉。。。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值