You are given an array rectangles
where rectangles[i] = [li, wi]
represents the ith
rectangle of length li
and width wi
.
You can cut the ith
rectangle to form a square with a side length of k
if both k <= li
and k <= wi
. For example, if you have a rectangle [4,6]
, you can cut it to get a square with a side length of at most 4
.
Let maxLen
be the side length of the largest square you can obtain from any of the given rectangles.
Return the number of rectangles that can make a square with a side length of maxLen
.
Example 1:
Input: rectangles = [[5,8],[3,9],[5,12],[16,5]] Output: 3 Explanation: The largest squares you can get from each rectangle are of lengths [5,3,5,5]. The largest possible square is of length 5, and you can get it out of 3 rectangles.
Example 2:
Input: rectangles = [[2,3],[3,7],[4,3],[3,7]] Output: 3
Constraints:
1 <= rectangles.length <= 1000
rectangles[i].length == 2
1 <= li, wi <= 109
li != wi
class Solution:
def countGoodRectangles(self, rectangles: List[List[int]]) -> int:
ans = mx = 0
for l, w in rectangles:
t = min(l, w)
if mx < t:
mx, ans = t, 1
elif mx == t:
ans += 1
return ans
class Solution {
public int countGoodRectangles(int[][] rectangles) {
int ans = 0, mx = 0;
for (int[] r : rectangles) {
int t = Math.min(r[0], r[1]);
if (mx < t) {
mx = t;
ans = 1;
} else if (mx == t) {
++ans;
}
}
return ans;
}
}
function countGoodRectangles(rectangles: number[][]): number {
let maxLen = 0,
ans = 0;
for (let [l, w] of rectangles) {
let k = Math.min(l, w);
if (k == maxLen) {
ans++;
} else if (k > maxLen) {
maxLen = k;
ans = 1;
}
}
return ans;
}
class Solution {
public:
int countGoodRectangles(vector<vector<int>>& rectangles) {
int ans = 0, mx = 0;
for (auto& r : rectangles) {
int t = min(r[0], r[1]);
if (mx < t) {
mx = t;
ans = 1;
} else if (mx == t)
++ans;
}
return ans;
}
};
func countGoodRectangles(rectangles [][]int) int {
ans, mx := 0, 0
for _, r := range rectangles {
t := r[0]
if t > r[1] {
t = r[1]
}
if mx < t {
mx, ans = t, 1
} else if mx == t {
ans++
}
}
return ans
}