力扣第224场周赛思路分享(含代码)

本文分享了力扣第224场周赛的四道算法题目,包括:求可以形成最大正方形的矩形数目、找同积元组、重新排列矩阵后最大子矩阵面积以及猫和老鼠II的解题思路和代码实现。主要涉及数据结构和图论的应用。
摘要由CSDN通过智能技术生成

0. 写在前面

除了最后一个题,这次周赛还算比较友好。题目也比较有意思。
在这里插入图片描述

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

(1)题目

给你一个数组 rectangles ,其中 rectangles[i] = [li, wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。

如果存在 k 同时满足 k <= li 和 k <= wi ,就可以将第 i 个矩形切成边长为 k 的正方形。例如,矩形 [4,6] 可以切成边长最大为 4 的正方形。

设 maxLen 为可以从矩形数组 rectangles 切分得到的 最大正方形 的边长。

返回可以切出边长为 maxLen 的正方形的矩形 数目 。

示例 1:
输入:rectangles = [[5,8],[3,9],[5,12],[16,5]]
输出:3
解释:能从每个矩形中切出的最大正方形边长分别是 [5,3,5,5] 。
最大正方形的边长为 5 ,可以由 3 个矩形切分得到。
示例 2:
输入:rectangles = [[2,3],[3,7],[4,3],[3,7]]
输出:3
提示:
1 <= rectangles.length <= 1000
rectangles[i].length == 2
1 <= li, wi <= 109
li != wi

(2)解读与思路

每个长方形求个最小,所有边长维护最大,顺带维护等于最大的个数。

(3)代码实现

class Solution {
   
public:
    int countGoodRectangles(vector<vector<int>>& rectangles) {
   
        int maxLen = min(rectangles[0][0], rectangles[0][1]);
        int res = 1;
        for(int i = 1; i < rectangles.size(); i++) {
   
            if(min(rectangles[i][0], rectangles[i][1]) > maxLen) {
   
                maxLen = min(rectangles[i][0], rectangles[i][1]);
                res = 1;
            }
            else if(min(rectangles[i][0], rectangles[i][1]) == maxLen)
                res++;
        }
        return res;
    }
};

2. 同积元组

(1)题目

给你一个由 不同 正整数组成的数组 nums ,请你返回满足 a * b = c * d 的元组 (a, b, c, d) 的数量。其中 a、b、c 和 d 都是 nums 中的元素,且 a != b != c != d 。

示例 1:
输入:nums = [2,3,4,6]
输出:8
解释:存在 8 个满足题意的元组:
(2,6,3,4) , (2,6,4,3) , (6,2,3,4) , (6,2,4,3)
(3,4,2,6) , (3,4,2,6) , (3,4,6,2) , (4,3,6,2)
示例 2:
输入:nums = [1,2,4,5,10]
输出:16
解释:存在 16 个满足题意的元组:
(1,10,2,5) , (1,10,5,2) , (10,1,2,5) , 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值