美文网首页
实习机试-华为

实习机试-华为

作者: Incredibles | 来源:发表于2020-04-29 23:34 被阅读0次

    昨晚收到面试邀请后就开始临阵磨枪,加上今天总共在剑指offer上刷了十几道题吧。
    晚上参加华为的机试,2个小时3个题。最后一个是图的,直接放弃了,还没复习到。
    成绩上第一个题通过了90%的用例,另外的10%实在没测出来,考试模式也不会给你看什么用例没有通过,只有比例。
    第二题只过了30%,后来想出来第二题的问题所在了,遗憾的是时间到了。
    前两个都是字符串处理的,难度怎么说呢,过程比较复杂,需要花点时间。
    另外今晚的题有点很坑的地方在于要自己控制输入输出,我在第二题时忘了getline是怎么用的了,大概耽误了十几分钟才试出来,有点遗憾。
    第一题:
    输入一串字符,没有空格,字符数量小于8.
    求这些字符可以组成多少种不同的字符串排列。
    我的求解:

    #include<string>
    #include<vector>
    #include<iostream>
    using namespace std;
    
    int main()
    {
        vector<char> input_data = { 'a', 'b', 'a', 'c'};
        string tmp;
        int num[256] = { 0 };
        char c;
    
        /*while (cin >> c)
            input_data.push_back(c);*/
    
        if (input_data.size() == 0) {
            cout << 0;
            return 0;
        }
        // 统计重复字符的数量
        for (auto iter = input_data.begin(); iter != input_data.end(); iter++)
        {
            if (tmp.find(*iter) == string::npos) {
                tmp += *iter;
                num[*iter]++;
            }
            else
                num[*iter]++;
        }
        // 排列组合的分子项
        int res1 = 1, tmp1 = input_data.size();
        while (tmp1 > 0)
        {
            res1 *= tmp1;
            tmp1--;
        }
        // 排列组合的分母项
        int res2 = 1;
        for (auto iter = tmp.begin(); iter != tmp.end(); iter++)
        {
            while (num[*iter] > 0) {
                res2 *= num[*iter];
                num[*iter]--;
            }
        }
        cout << res1 / res2 << endl;
        system("pause");
        return 0;
    }
    

    感觉还可以再优化一下,res2 的值可以在统计阶段就算出来。

    for (auto iter = input_data.begin(); iter != input_data.end(); iter++)
        {
            if (tmp.find(*iter) == string::npos) {
                tmp += *iter;
                num[*iter]++;
            }
            else
            {
                num[*iter]++;
                res2 *= num[*iter];
            }           
        }
    

    第二题:
    第一行输入一串字符,无空格。第二行输入一个数k,k小于字符串长度。从字符串中删除k个字符使字典序最小。
    这个题明天再写,现在脑壳有些痛,要睡觉了。

    相关文章

      网友评论

          本文标题:实习机试-华为

          本文链接:https://www.haomeiwen.com/subject/kfwowhtx.html