zoukankan      html  css  js  c++  java
  • 华为od面试算法题

    Jeffrey Shao(同事的面试题)

    他的网页链接:https://www.mockingbird.fun/2019/12/09/%E5%8D%8E%E4%B8%BAod%E9%9D%A2%E8%AF%95%E7%AE%97%E6%B3%95%E9%A2%98/

    以下均来自回忆,仅供参考。

    机试题:

    题目:

    统计参加聚会,每个小时的人数,聚会从12点至20点。

    输入:

    每行包括两个整数,第一整数是参加聚会的时间,第二个整数是离开聚会的时间,例如 12,15,不包含15,意味着[12,15),以-1,-1结束输入

    输出:

    例如:[12,13):3

    测试用例:
    输入:
    12,16
    13,15
    18,20
    12,20
    -1,-1
    输出:
    [12,13):2
    [13,14):3
    [14,15):3
    [15,16):3
    [16,17):2
    [17,18):2
    [18,19):2
    [19,20):2

    我一开始的思路是用一个数据结构来保存每个人进出的时间,遍历每个人的进出时间,发现这个而操作太繁琐。
    转念一想,对每个人进出的时间琢磨了一下,不如用一个数组记录每个小时的人数,例如输入12,16

    #include<iostream>
    #include<stdio.h>
    
    using namespace std;
    
    
    int main() {
        int a, b;
        int record[30] = { 0 };
        while (scanf("%d,%d",&a,&b))
        {
            if (a == -1 || b == -1)
                return;
            for (int i = a; i < b; i++) {
                record[i]++;
            }
        }
        printf("[12,13):%d", record[12]);
        printf("[13,14):%d", record[13]);
        printf("[14,15):%d", record[14]);
        printf("[15,16):%d", record[15]);
        printf("[16,17):%d", record[16]);
        printf("[17,18):%d", record[17]);
        printf("[18,19):%d", record[18]);
        printf("[19,20):%d", record[19]);
        for (int i = 0; i < 30; i++) {
            record[i] = 0;
        }
        return 0;
    }

    底下是我自己的代码

    #include<iostream>
    #include <vector>
    using namespace std;
    struct member
    {
        int start=0;
        int end=0;
    };
    int cal_number(vector<member> memberlist, int start, int end)
    {
        int count = 0;
        for (int i = 0; i < memberlist.size(); i++)
        {
            if (memberlist[i].start <= start && memberlist[i].end >= end)
                count++;
        }
        return count;
    }
    int main()
    {
        member person;
        vector<member> memberlist;
        while (scanf("%d,%d", &person.start, &person.end))
        {
            if (person.start == -1 && person.end == -1)
                break;
            memberlist.push_back(person);
        }
        int max_time = 0;
        int min_time = 24;
        for (int i = 0; i < memberlist.size(); i++)
        {
            if (memberlist[i].end > max_time)
                max_time = memberlist[i].end;
            if (memberlist[i].start < min_time)
                min_time = memberlist[i].start;
        }
        while (max_time != min_time)
        {
            printf("[%d,%d):%d
    ", min_time, min_time + 1, cal_number(memberlist, min_time, min_time + 1));
            min_time++;
        }
        return 1;
    
    }

    结果好像不一样,我是用的他淘汰的方法

  • 相关阅读:
    192021
    191020
    magento注册
    magento登陆
    把PHP的数组变成带单引号的字符串
    magento直接操作数据库
    兼容各大浏览器的event获取
    手动修改magento域名
    微信支付中的jsapi返回提示信息
    CentOS 下安装xdebug
  • 原文地址:https://www.cnblogs.com/suxia/p/12015334.html
Copyright © 2011-2022 走看看