牛牛摆放花

牛牛有n朵需要摆放的花,但是每朵花呢,高度都不一样,牛牛不喜欢相邻的花高度相差太多,这样会影响美感。
所以牛牛提出了一个“丑陋度”的概念,“丑陋度”意思为在一个摆放序列中,相邻花高度差的最大值。而且牛牛是一个完美主义者,所以他希望:
1.将这些花摆成首尾相接的圆形
2.为了美观,他希望摆放的花“丑陋度”最小

解题思路:贪心。
时间复杂度 图片说明 ,空间复杂度 图片说明
首先我们需要构造出一个序列,使其满足最小的丑陋度,然后再去计算丑陋度的大小。如果想构造一个序列满足相邻花高度差的最小值,我们可以首先把最大数放中间,然后每一次放次小的数在两边,这是没问题的(就是贪心的思想),至于次小的数放左边还是右边,是没有影响的。
根据此贪心思路,首先对该数组进行从小到大排序,然后需要一个辅助数组b来存储我们构造出的序列,序列的存储规则按贪心思路描述的即可。最后计算丑陋度的大小。
注意,题意要满足圆形的序列排列,所以数组最后的元素仍然要与数组的第一个元素进行比较。

/**
 * ​返回按照这些花排成一个圆的序列中最小的“丑陋度”
 * @param n int整型 花的数量
 * @param array int整型vector 花的高度数组
 * @return int整型
 */
int solve(int n, vector<int> &array)
{
    // write code here
    if (n == 2)
    {
        return abs(array[1] - array[0]);
    }
    sort(array.begin(), array.end());
    int b[100001];
    int l = 0, r = n - 1;
    for (int i = 0; i < n; i++)
    {
        if (i & 1)
        {
            b[l++] = array[i];
        }
        else
        {
            b[r--] = array[i];
        }
    }
    int maxx = -1;
    for (int i = 1; i < n; i++)
    {
        maxx = max(maxx, abs(b[i] - b[i - 1]));
    }
    maxx = max(maxx, abs(b[n - 1] - b[0]));
    return maxx;
}
全部评论

相关推荐

06-23 11:28
门头沟学院 Java
牛客91966197...:也有可能是点拒绝的时候自动弹的话术
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务