LeetCode 第 224 场周赛
第一题: 5653. 可以形成最大正方形的矩形数目
模拟、暴力即可
AC Code
class Solution {
public int countGoodRectangles(int[][] r) {
int ans = 0, mx = 0;
Map<Integer, Integer> map = new HashMap<>();
int len = r.length;
for(int i = 0; i < len; i++) {
int mn = Math.min(r[i][0], r[i][1]);
int cnt = map.getOrDefault(mn, 0);
map.put(mn, cnt + 1);
mx = Math.max(mn, mx);
}
ans = map.get(mx);
return ans;
}
}
第二题: 5243. 同积元组
分析题目, 看似好像是全排列,枚举所有组合情况
其实当 a ∗ b = = c ∗ d a * b == c * d a∗b==c∗d 并且 a ! = b ! = c ! = d a != b != c != d a!=b!=c!=d 的时候,每找到一个符合条件的四个数, 就对应了 8 个组合方式
那么就可以将问题转化成找有几个两个值相乘后是相等的.
扫描二维码关注公众号,回复:
12283585 查看本文章
[1,2,4,5,10] -> 1 ∗ 2 = 2 , 1 ∗ 4 = 4 , 5 , 10 , 8 , 10 , 20 , 20 , 50 1*2=2, 1*4 = 4, 5, 10, 8, 10, 20, 20, 50 1∗2=2,1∗4=4,5,10,8,10,20,20,50
所以就有两个10、两个20,分别为 a ∗ b a * b a∗b 、 c ∗ d c * d c∗d 的值,所以有两组符合等式的, 他们共有 2 * 8 种组合方式.
根据 a ∗ b = = c ∗ d a * b == c * d a∗b==c∗d, 当两个数相等的值有 2 个的时候,可以组成一种,当两个数相等的值有 3 个的时候,可以 3 种,4个的时候,组成 6 种… 规律即为 ( i - 1) 个 + (i - 1) 个时的组合数, 代码中即为
AC Code
class Solution {
public int tupleSameProduct(int[] nums) {
int ans = 0, len = nums.length;
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < len; i++) {
while(i + 1 < len && nums[i + 1] == nums[i]) i++;
for(int j = i + 1; j < len; j++) {
while(j + 1 < len && nums[j + 1] == nums[j]) j++;
int tmp = nums[i] * nums[j];
int cnt = map.getOrDefault(tmp, 0);
map.put(tmp, cnt + 1);
}
}
//System.out.println(map);
int[] arr = new int[1001];
arr[2] = 1; arr[3] = 3; arr[4] = 6;
for(int i = 5; i < 1001; i++) arr[i] = arr[i - 1] + i - 1;
for(Integer val : map.values()) {
if(val > 1) {
ans = ans + arr[val] * 8;
}
}
return ans;
}
}
第三题: 5655. 重新排列后的最大子矩阵
待补
AC Code
第四题: 5529. 猫和老鼠 II
待补
AC Code