这次的比赛结果而言真的是惨不忍睹,只做出两题,还错了两次,然后排名就真的惨不忍睹了,都没脸说成绩了,唉。。。
后面加油吧。。。
给出题目一的试题链接如下:
这一题没啥说的,每个矩形的短边长就是能切出的最大正方形边长,然后对最大值统计一下频数就是最终的结果了。
给出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。
给出题目二的试题链接如下:
这一题事实上也没啥好说的,由于所有的数都不相同,因此如果两个不同的组合ab
和cd
乘积相同时,两者必不会有交叠。
因此,我们只需要统计每一个可能的成绩的组合次数即可。
给出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。
给出题目三的试题链接如下:
这一题算是这次比赛里面做的最为失败的一题吧,因为毫无思路,然后就被虐惨了。
现在也是看了leetcode上面别人写的算法解析才有了思路。
不过看过思路之后发现,这题确实还是蛮简单的,唉。。。
思路其实挺简单的,就是记录下每一行中每一列中的元素往上连续有多少个1,然后对其重新排个序,计算一下其中可能的最大矩阵面积大小即可。
由此得到的算法复杂度就是O(M⋅N)。
给出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。
给出题目四的试题链接如下:
这一题放弃了,想了近一周,依然没有一个好的思路,试过dfs和bfs,前者一直遇到死循环没有debug出来问题,后者答案不对,真的是烦,暂时这里是放弃了,如果有读者有好的思路的话请务必不吝赐教一下,真心感谢,唉。。。