狂宠粉博主 2023-12-05 20:24 采纳率: 100%
浏览 5
已结题

第2题 房间数量 (c++语言)

第2题 房间数量(c++语言)
有n头奶牛,第i头奶牛的身高是h[i]。身高相同的所有奶牛都住在同一个房间。问需要多少个房间才能安排好所有奶牛的住宿。

输入格式
接下来有n行,第i行是一个正整数h[i]。

60%的数据: 1 <= n <= 1000, 1 <= h[i] <= 1000000。

80%的数据:1 <= n <= 100000, 1 <= h[i] <= 1000000。

100%的数据:1 <= n <= 100000, 1 <= h[i] <= 2000000000。

输出格式
一个整数。

输入/输出例子1
输入:

5

10 30 10 20 30

输出:

3

  • 写回答

3条回答 默认 最新

  • 柒-寒 2023-12-05 20:51
    关注

    以下是用 C++ 解决这个问题的代码:

    #include <iostream>
    #include <unordered_set>
    
    int main() {
        int n;
        std::cin >> n;
    
        std::unordered_set<int> distinct_heights;
        for (int i = 0; i < n; ++i) {
            int height;
            std::cin >> height;
    
            distinct_heights.insert(height);
        }
    
        int num_rooms = distinct_heights.size();
        std::cout << num_rooms << std::endl;
    
        return 0;
    }
    

    在这个程序中,我们首先读取输入的奶牛数量 n

    然后,我们用 unordered_set 来存储出现过的不同的奶牛身高。unordered_set 是一个无序容器,其中的元素不会有重复。

    接下来,我们循环 n 次,读取每头奶牛的身高,并将身高插入到 unordered_set 中。

    最后,我们输出 unordered_set 的大小,即为需要的房间数量。

    运行示例:

    输入:
    5
    10 30 10 20 30
    输出:
    3
    

    根据题目的要求,在 80% 的数据范围内运行时,哈希表的冲突数量会比较少,因此可以使用 unordered_set 来高效地解决这个问题。在最坏的情况下,即 n 较大且所有奶牛的身高都不相同时,时间复杂度为 O(n)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月11日
  • 已采纳回答 10月3日
  • 创建了问题 12月5日