第224场周赛 思维

1725. 可以形成最大正方形的矩形数目

第224场周赛 思维_第1张图片

Note

  1. o(n) 签到,

1726. 同积元组

第224场周赛 思维_第2张图片

Note

  1. 思路:o(n^2)算出乘积值出现过的次数,再通过公式求得最终答案 A(2,2) * 4 * C(出现次数,2)

Code

class Solution:
    def tupleSameProduct(self, nums: List[int]) -> int:
        dic = defaultdict(int)
        for i in range(len(nums)):
            for j in range(i+1, len(nums)):
                a,b = nums[i], nums[j]
                dic[a*b] += 1
        #print(dic)
        ans = 0
        for k,v in dic.items():
            if(v >= 2):
                ans += 2 * 2 * 2 * v * (v-1) // 2
        return ans

重新排列后的最大子矩阵

第224场周赛 思维_第3张图片

Note

  1. 思路:统计每列的一的个数,大到小排序,找一个数数组和步长乘积的最大值(利用排序保证当前节点为矩形的边界点)
  2. 类似题目
      1. 统计全 1 子矩形
      1. 统计全为 1 的正方形子矩阵

Code

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

1728. 猫和老鼠 II

Note

题都没读,等有时间先把I做了

Nutshell

这次赛的思维题目较多,需要当场发现数学上的规律。还是刷题少了,dfs并不万能。

你可能感兴趣的:(LeetCode)