最大正方形边长

给定一个整数数组 nums,你可以任意重排数组元素,将它排列成一个新的高度分布(每列的高度);然后在这个新的二维结构中找出一个最大的正方形;返回这个正方形的边长。

  1. 将数组从大到小排序;
  2. 遍历每个位置 i,查看前 i + 1 个元素是否能组成一个边长为 i + 1 的正方形;
  3. 即判断 heights[i] >= (i+1),如果是,则返回 i+1;
  4. 最终结果就是最大的满足条件的 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;
}

 

posted @ 2025-07-12 11:16  最近饭吃的很多  阅读(8)  评论(0)    收藏  举报