【网易互娱】推荐算法笔试 100 100 100 75

半小时三道题,然后最后一题卡着,emmmmm
第一题最大公约数最小公倍数,先求最大公约t, 然后a / t * b就是最小公倍,注意usigned long long不然会溢出
第二题有序聊表去重(重复保留2),比较简单,看代码吧
第三题其实就是个0-1背包问题,注意输出格式就行
第四题没什么比较好的办法,暴力剪枝过75%,试过dp但是O(n^4)也有问题,等一个大佬的解答
楼下放代码
#笔试题目##网易互娱##题解#
全部评论
第一题: unsigned long long gcd(unsigned long long x, unsigned long long y) {     if (x < y)         swap(x, y);     if (x % y == 0)         return y;     return gcd(y, x % y); } int main() {     unsigned long long x, y;     cin >> x >> y;     unsigned long long a = gcd(x, y);     cout << a << ' ' << x / a * y << endl;     system("pause");     return 0; }
点赞 回复
分享
发布于 2019-09-20 19:34
第二题: void removeDuplicates(ListNode *head) {     // 在这里编写代码     ListNode *p = head;     while(p != NULL && p->next != NULL){         ListNode *p1 = p->next;         if(p->val != p1->val){             p1 = p1->next;             p = p->next;             continue;         }         while(p1->next != NULL && p1->next->val == p->val)             p1 = p1->next;         p->next = p1;         p = p->next;         p1 = p1->next;     } }
点赞 回复
分享
发布于 2019-09-20 19:34
春招专场
校招火热招聘中
官网直投
第三题: int main() {     int n, total;     cin >> n >> total;     vector<int> w(total);     vector<float> price(total);     char temp;     float a;     for (int i = 0; i < total; i++) {         cin >> w[i] >> temp >> a;         price[i] = w[i] * a;     }     vector<float> dp(n + 1, 0);     float res = 0;     for (int i = 0; i < total; i++) {         for (int j = n; j > 0 && j >= w[i]; j--) {             dp[j] = max(dp[j], dp[j - w[i]] + price[i]);             res = max(res, dp[j]);         }     }     int k = res;     int t = (res - k) * 10000;     cout << to_string(k) + '.' + to_string(t) << endl;     system("pause");     return 0; }
点赞 回复
分享
发布于 2019-09-20 19:34
第四题: int helper(int i, int j, int x, int y, int k, vector<vector<char>> &graph) {     for (int a = 0; a < k; a++) {         for (int b = 0; b < k; b++) {             if (graph[i + a][j + b] != graph[x + a][y + b]) {                 k = min(k, b);             }         }     }     return k; } int main() {     int n, m;     cin >> n >> m;     vector<vector<char>> graph(n, vector<char>(m));     vector<vector<pair<int, int>>> hash(26);     for (int i = 0; i < n; i++) {         for (int j = 0; j < m; j++) {             cin >> graph[i][j];             hash[graph[i][j] - 'a'].push_back(make_pair(i, j));         }     }     int i, j, x, y, k, temp;     int res = 0;     vector<int> re(4);     for (int t = 0; t < 26; t++) {         for (int a = 0; a < hash[t].size(); a++) {             for (int b = a + 1; b < hash[t].size(); b++) {                 i = hash[t][a].first;                 j = hash[t][a].second;                 x = hash[t][b].first;                 y = hash[t][b].second;                 k = min(min(n - i, m - j), min(n - x, m - y));                 temp = helper(i, j, x, y, k, graph);                 if (temp > res) {                     res = temp;                     re[0] = i;                     re[1] = j;                     re[2] = x;                     re[3] = y;                 }             }         }     }     if (res != 0) {         cout << res << endl;         cout << re[0] + 1 << ' ' << re[1] + 1 << endl;         cout << re[2] + 1 << ' ' << re[3] + 1 << endl;     }     else         cout << 0 << endl;     system("pause");     return 0; }
点赞 回复
分享
发布于 2019-09-20 19:35
第三题我用背包没过😢
点赞 回复
分享
发布于 2019-09-20 19:38
第四题我二分答案,感觉应该没错,不知道为什么只能过65%
点赞 回复
分享
发布于 2019-09-20 19:39
第三题同背包,超时😂
点赞 回复
分享
发布于 2019-09-20 19:41
所以第二题是不需要输入的么。。。
点赞 回复
分享
发布于 2019-09-20 19:43
第四题好像是什么竞赛题原题 URAL 1486
点赞 回复
分享
发布于 2019-09-20 19:46
前端也是这套题。。。
点赞 回复
分享
发布于 2019-09-20 21:26
第四题我暴力只过了百分之50.。。
点赞 回复
分享
发布于 2019-09-20 23:44
同3.75。第四题思路咱俩一样,也是75。另外如果你的k最大已经不超过当前的res的话,就可以不去遍历了。
点赞 回复
分享
发布于 2019-09-21 00:49

相关推荐

1 20 评论
分享
牛客网
牛客企业服务