阿里巴巴8月3日笔试试题

第一题:小明有n个朋友,每个朋友有一定数量的钱去买房子,每个房子有舒适度和价格。
要求:1、一个人最多买一个房子。2、每个房子只能被一个人买。3、钱数必须大于房子价格。
问:如何买房子,使得舒适度之和最大。

第二题:给定字符串N,只包含abcdef,求子序列最大长度,子序列可以不连续。
要求:1、a必须在c、e前面,c必须在e前面。
2、b必须在d、f前面,d必须在f前面。

就记住这么多啦。
#笔试题目##阿里巴巴#
全部评论
好难啊
点赞 回复
分享
发布于 2020-08-03 20:17
第一题,题目中说拥有的钱必须比房价多,才能买房子。但是例子表明只需要相等就可以了。按照相等处理即可。另外,结果需要使用 64 位整型或者更大来保存,之前我用了 int,结果死活过不了,浪费我 20 分钟,哎。
点赞 回复
分享
发布于 2020-08-03 20:19
联易融
校招火热招聘中
官网直投
想的头皮发麻
点赞 回复
分享
发布于 2020-08-03 20:29
有大佬分享思路么
点赞 回复
分享
发布于 2020-08-03 20:39
第一题题解: void question1(){     int n, m;     cin >> n >> m;     map<int, int> money;     vector<vector<int>> house(m, vector<int>(2, 0));     for(int i=0;i<n;i++){         int k;         cin >> k;         money[k]++;     }     for(int i=0;i<m;i++){         cin >> house[i][0]; // 舒适度         cin >> house[i][1]; // 价格     }     sort(house.begin(), house.end(), [](const vector<int>& a, const vector<int>& b){         return a[0] > b[0]; // 按照舒适度降序排列     });     int res = 0;     // 优先买舒适度高的     for(int i = 0; i < house.size(); i++){         int sushi = house[i][0]; // 舒适度         int price = house[i][1];         // 找到拥有的钱刚刚超过或等于房价的那个人         // 把有更多钱的留着         auto it = money.lower_bound(price);         if(it != money.end()){             it->second--;             res += sushi;             if(it->second == 0){                 money.erase(it);             }         }         if(money.empty()){             break;         }     }     cout << res; }
点赞 回复
分享
发布于 2020-08-03 22:31
转https://blog.csdn.net/qq_22522375/article/details/107771758
点赞 回复
分享
发布于 2020-08-09 11:37

相关推荐

4 7 评论
分享
牛客网
牛客企业服务