当前位置: 面试刷题>> 构造矩形 (经典算法题500道)


### 题目描述补充 题目:**构造矩形** 给定一个整数数组`nums`,其中每个元素代表矩形的宽度或高度(不考虑方向,即宽度和高度可以互换)。你需要使用这些整数来构造尽可能多的矩形(每个矩形的长和宽必须来自`nums`中的元素,且每个元素只能使用一次)。构造矩形时,不需要考虑矩形的方向,即如果两个矩形(a×b 和 b×a)算作不同的矩形,那么在这个问题中它们应被视为相同的矩形。请返回可以构造的矩形的最大数量。 ### 示例 **输入**:`nums = [1, 1, 2, 2]` **输出**:3 **解释**:可以构造的矩形有:(1,1), (1,2) 和 (2,2)。 ### PHP 示例代码 ```php $nums[$j]) break; // 计算以当前宽度和高度为边的矩形数量 $count += min($freq[$nums[$i]], floor($freq[$nums[$j]] / 2)); } } return $count; } // 示例测试 $nums = [1, 1, 2, 2]; echo maxRectangles($nums); // 输出: 3 ?> ``` **注意**:上述PHP代码是一个简化的版本,主要用于说明思路,可能不是最优解。真实环境中,你可能需要更复杂的逻辑来处理特殊情况或优化性能。 ### Python 示例代码 ```python def maxRectangles(nums): from collections import Counter freq = Counter(nums) nums.sort() # 排序以优化查找 count = 0 for i in range(len(nums)): for j in range(i + 1, len(nums)): if nums[i] > nums[j]: break # 计算以nums[i]和nums[j]为长宽或高宽的矩形数量 count += min(freq[nums[i]], freq[nums[j]] // 2) return count # 示例测试 nums = [1, 1, 2, 2] print(maxRectangles(nums)) # 输出: 3 ``` ### JavaScript 示例代码 ```javascript function maxRectangles(nums) { const freq = {}; for (let num of nums) { freq[num] = (freq[num] || 0) + 1; } nums.sort((a, b) => a - b); // 排序 let count = 0; for (let i = 0; i < nums.length; i++) { for (let j = i + 1; j < nums.length; j++) { if (nums[i] > nums[j]) break; // 计算矩形数量 count += Math.min(freq[nums[i]], Math.floor(freq[nums[j]] / 2)); } } return count; } // 示例测试 const nums = [1, 1, 2, 2]; console.log(maxRectangles(nums)); // 输出: 3 ``` **码小课**网站中有更多关于算法和数据结构的相关内容分享给大家学习,包括但不限于排序、搜索、图论、动态规划等话题的深入解析和实战应用。