最大正方形边长
给定一个整数数组 nums,你可以任意重排数组元素,将它排列成一个新的高度分布(每列的高度);然后在这个新的二维结构中找出一个最大的正方形;返回这个正方形的边长。
- 将数组从大到小排序;
- 遍历每个位置 i,查看前 i + 1 个元素是否能组成一个边长为 i + 1 的正方形;
- 即判断 heights[i] >= (i+1),如果是,则返回 i+1;
- 最终结果就是最大的满足条件的 i+1。
输入: nums = [5,1,3,2,4]
输出: 3
#include <iostream> #include <vector> #include <algorithm> using namespace std; int largestSquareAfterRearranging(vector<int>& nums) { // 从大到小排序 sort(nums.begin(), nums.end(), greater<int>()); int n = nums.size(); int maxSide = 0; for (int i = 0; i < n; ++i) { // 前 i+1 个元素,最小的是 nums[i] if (nums[i] >= i + 1) { maxSide = i + 1; } } return maxSide; } // 主函数测试 int main() { vector<int> nums = {5, 1, 3, 2, 4}; cout << "最大正方形的边长为:" << largestSquareAfterRearranging(nums) << endl; return 0; }
浙公网安备 33010602011771号