1. 程式人生 > 其它 >[LeetCode] 1725. Number Of Rectangles That Can Form The Largest Square

[LeetCode] 1725. Number Of Rectangles That Can Form The Largest Square

You are given an arrayrectangleswhererectangles[i] = [li, wi]represents theithrectangle of lengthliand widthwi.

You can cut theithrectangle to form a square with a side length ofkif bothk <= liandk <= wi. For example, if you have a rectangle[4,6], you can cut it to get a square with a side length of at most4

.

LetmaxLenbe the side length of thelargestsquare you can obtain from any of the given rectangles.

Returnthenumberof rectangles that can make a square with a side length ofmaxLen.

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

可以形成最大正方形的矩形數目。

給你一個數組 rectangles ,其中 rectangles[i] = [li, wi] 表示第 i 個矩形的長度為 li 、寬度為 wi 。

如果存在 k 同時滿足 k <= li 和 k <= wi ,就可以將第 i 個矩形切成邊長為 k 的正方形。例如,矩形 [4,6] 可以切成邊長最大為 4 的正方形。

設 maxLen 為可以從矩形陣列rectangles 切分得到的 最大正方形 的邊長。

請你統計有多少個矩形能夠切出邊長為 maxLen 的正方形,並返回矩形 數目 。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/number-of-rectangles-that-can-form-the-largest-square
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

題意不難理解。對於 input 數組裡面給定的每個長方形的長和寬,我們先找到那個寬,這樣我們就知道了每個長方形切割之後能形成的最大的正方形的邊長,記為 side。在找這個 side 的過程中,我們同時也記錄一個全域性出現的最大次數 count。如果有某一個 side 的出現次數是 count,那麼這個邊長即是題意所求。

時間O(n)

空間O(1)

Java實現

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

LeetCode 題目總結