形成M组,其建筑物的高度与N栋建筑物相同

时间:2016-12-09 12:40:15

标签: c++ arrays algorithm sorting recursion

我得到了N座高度的建筑物。

我必须形成大小为M且具有相同高度建筑物的群组。鉴于,我可以摧毁更高的建筑物,使其高度与较小的建筑物相等。

我必须找到要销毁的最小建筑物数量,以便形成完全N / M组。给予,N总是可以被M整除。

例如:

N = 8,M = 4

建筑物高度:6 4 5 1 5 2 3 2

答案:5

我们可以摧毁两个高度为5的建筑物到两个2's形成第一组然后摧毁高度3,4,6到高度1的建筑物以形成具有相同高度1的建筑物的第二组。

因此,我们形成了大小为4(M)的2个(N / M)组。要销毁的建筑物的最小数量为5个。

N = 8,M = 4

建筑物高度:1 1 1 2 4 4 4 4

答案:1

任何人都可以给我一些暗示。

1 个答案:

答案 0 :(得分:0)

算法

  1. 将所有高度(递增顺序)放在哈希中(比如STL上的有序地图) - 键作为高度,数据作为该高度的频率。
  2. 对于N / M次,获取freq(比如sum)并继续添加。
  3. 结果= N - 总和。
  4. 伪代码

    arr[] = {6 4 5 1 5 2 3 2}
    map<int, int, greater<int>> mp;
    for(auto elem : arr)
    {
        if(data exist)
            increase freq
        else
            insert key with freq as 1.
    }
    sum = 0
    for(i=0 to N/M)
        sum += freq of mp[i]
    
    Result = N - sum