华为笔试讨论帖 开发岗


如题,今晚的华为笔试难度和室友他们做的不是一个级别啊
室友大概是半个月前的笔试,听说很简单
今晚这个,,em
有今晚笔试的小伙伴出来讨论下吗
#华为#
全部评论
第一题:map搞搞 #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <algorithm> #include <iostream> #include <map> using namespace std; char s[100005]; map<char,int> m; int main() {     while(gets(s))     {         int cnt = -1;         int pos = 100000005;         char ans;         m.clear();         int len = strlen(s);         for(int i = 0; i < len; ++i)         {             if(s[i] >= 'a' && s[i] <= 'z')             {                 s[i] = s[i] - 32;             }             if(s[i] >='A' && s[i] <= 'Z')             {                 m[s[i]]++;             }             if(m[s[i]] >= cnt)             {                 cnt = m[s[i]];                 ans = s[i];                 //pos = i;             }         }         for(int i = 0; i < len; ++i)         {             if(m[s[i]] == cnt)             {                 ans = s[i];                 break;             }         }         cout<<ans<<cnt<<endl;     }     return 0; } 第二题 哈弗曼树:DFS+优先队列模拟 #include <cstdio> #include <iostream> #include <set> #include <string> #include <cstring> #include <map> #include <algorithm> #include <queue> #include <vector> using namespace std; const int maxn = 1e5; vector<int> num[300]; struct Node{     Node *left;     Node *right;     int id;     int code;     int num;     friend bool operator < (const Node &a ,const Node &b){         return a.num > b.num;     } }a[maxn]; priority_queue< Node > q; string Code[300]; void dfs(Node *root,string now){    if (root->left == NULL  && root->right == NULL){         Code[root->code] = now;         return;    }    string Now = now;    if (root->left != NULL) dfs(root->left,Now + "0");    if (root->right != NULL) dfs(root->right,Now + "1"); } int main(){     string s;     cin >> s;     for (int i = 0; i < (int)s.size(); i++){         num[s[i]].push_back(i);     }     int cnt = 0;     while (!q.empty()) q.pop();     for (int i = 0; i < 300; i++){         if ((int)num[i].size() > 0){             a[cnt].code = i;             a[cnt].id = cnt;             a[cnt].num = (int)num[i].size();             a[cnt].left = NULL;             a[cnt].right = NULL;             q.push(a[cnt]);             cnt++;         }     }     while (q.size() > 1){         Node fr1 = q.top();         q.pop();         Node fr2 = q.top();         q.pop();         a[cnt].left = &a[fr1.id];         a[cnt].right = &a[fr2.id];         a[cnt].id = cnt;         a[cnt].num = fr1.num + fr2.num;         q.push(a[cnt]);         cnt++;     }     Node f = q.top();     q.pop();     Node *Root = &f;     dfs(Root,"");     for (int i = 0; i < (int) s.size(); i++){         cout << Code[s[i]];     }     cout << endl; } 第三题:题意不清的模拟题,过不去,过了40% 请AC的大佬指正还需要注意那些细节,谢谢! #include <cstdio> #include <iostream> #include <algorithm> #include <vector> int main() {     int n, x;     scanf("%d", &n);     bool head = true, flag = true;     int pre = 0;     std::vector< int > ans;     while(flag && n--) {         scanf("%x", &x);         if(!x) {             if(!n) {                 flag = false;                 break;             }             scanf("%x", &x);             --n;             if(x > 15) flag = false;             else if(head) {                 pre = x;                 head = false;             } else if((pre + 1) % 16 != x) flag = false;             else pre = x;             if(!n) {                 flag = false;                 break;             }             scanf("%x", &x);             --n;             int t = x >> 4, len = x & 15;             std::vector< int > d;             if(len > n) {                 flag = false;                 break;             }             while(len--) {                 scanf("%x", &x);                 d.push_back(x);                 --n;             }             if(t == 1 || t == 2) std::sort(d.begin(), d.end());             if(t == 2) ans.insert(ans.end(), d.begin(), d.end());             else ans.insert(ans.end(), d.rbegin(), d.rend());         }     }     if(flag) {         for(int i = 0; i < ans.size(); ++i) {             if(i) printf(" ");             printf("0x%x", ans[i]);         }         puts("");     } else puts("FALSE");     return 0; }
点赞 回复 分享
发布于 2018-09-26 21:24
。。。。。我是补笔试的。。。只做出来第一题。。感觉凉凉啊。。
点赞 回复 分享
发布于 2018-09-26 21:14
list2=[] list3=[] class Node(object): def__init__(self,name=None,value=None): self._name=name self._value = value self._left=None self._right = None class HuffmanTree(object): def __init__(self, char_weights): self.a=[Node(part[0],part[1])for part in char_weights] while len(self.a)!=1: self.a.sort(key=lambda node:node._value,reverse=True) c=Node(value=(self.a[-1]._value+self.a[-2]._value)) c._left=self.a.pop(-1) c._right=self.a.pop(-1) self.a.append(c) self.root=self.a[0] self.b=range(10) def pre(self,tree,length): node=tree if(not node): return elif node._name: list1='' for i in range(length): list1+=str(self.b[i]) list2.append(node._name) list3.append(list1) return self.b[length]=0 self.pre(node._left,length+1) self.b[length]=1 self.pre(node._right,length+1) def get_code(self): self.pre(self.root,0) if __name__=='__main__': dic=[] i = raw_input() for j in set(i): dic.append((j,i.count(j))) char_weights=dic tree = HuffmanTree(char_weights) tree.get_code() r='' for l in i: for m in range(len(list2)): if l==list2[m]: r+=str(list3[m]) print r # # abbcccdddd # 1101111111010100000 测试用例 为什么和我的不一样,求大佬告知!
点赞 回复 分享
发布于 2018-09-26 21:14
100 100 0,做得要哭了
点赞 回复 分享
发布于 2018-09-26 21:10
第二题就没写出来  哈夫曼感觉要写很长很长啊
点赞 回复 分享
发布于 2018-09-26 21:10
面试完让我补笔试。。。做了今晚的想哭
点赞 回复 分享
发布于 2018-09-26 21:09
目前难度: 阿里>百度>华为
点赞 回复 分享
发布于 2018-09-26 21:09
不怕,做一题就能面试了
点赞 回复 分享
发布于 2018-09-26 21:08
你也是补考吗?
点赞 回复 分享
发布于 2018-09-26 21:04

相关推荐

03-27 17:33
门头沟学院 Java
代码飞升:同学院本,你要注意hr当天有没有回复过,早上投,还要打招呼要推销自己,不要一个劲投
点赞 评论 收藏
分享
05-07 13:29
已编辑
门头沟学院 Java
北斗导航Compass低仿版:能不能先搞清楚优先级啊,怎么可能是项目问题,项目很重要吗?又没学历 又没实习大厂凭啥约面?那玩具项目 没应用在真实生产环境下的 就算做上天又有什么用?早点找个小公司实习 拿小公司实习去投大厂实习,这才是你现在该做的
投递美团等公司10个岗位 简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

更多
牛客网
牛客企业服务