题目

类型:双指针
image.png

解题思路

记 l 和 w 为某个矩形的长度和宽度,设 k 为可以从这个矩形中切出的最大正方形的边长,则有 可以形成最大正方形的矩形数目 - 图2
我们遍历输入数组,维护两个变量, 可以形成最大正方形的矩形数目 - 图3表示遍历到当前矩形时的所有可以切出的最大正方形的边长的最大值,可以形成最大正方形的矩形数目 - 图4表示可以切出边长为 可以形成最大正方形的矩形数目 - 图5 的正方形的个数。计算当前的 k,当 可以形成最大正方形的矩形数目 - 图6时,对 可以形成最大正方形的矩形数目 - 图7 进行加 1 操作;当 可以形成最大正方形的矩形数目 - 图8时,则更新 可以形成最大正方形的矩形数目 - 图9 为 k,并把 可以形成最大正方形的矩形数目 - 图10 重置为 1。

代码

  1. class Solution {
  2. public int countGoodRectangles(int[][] rectangles) {
  3. int res = 0, maxLen = 0;
  4. for (int[] rectangle : rectangles) {
  5. int l = rectangle[0], w = rectangle[1];
  6. int k = Math.min(l, w);
  7. if (k == maxLen) {
  8. ++res;
  9. } else if (k > maxLen) {
  10. res = 1;
  11. maxLen = k;
  12. }
  13. }
  14. return res;
  15. }
  16. }