阿里巴巴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

相关推荐

2024-12-27 23:45
已编辑
三江学院 Java
程序员牛肉:死局。学历+无实习+项目比较简单一点。基本就代表失业了。 尤其是项目,功能点实在是太假了。而且提问点也很少。第一个项目中的使用jwt和threadlocal也可以作为亮点写出来嘛?第二个项目中的“后端使用restful风格”,“前端采用vue.JS”,“使用redis”也可以作为亮点嘛? 项目实在是太简单了,基本就是1+1=2的水平。而你目标投递的肯定也是小厂,可小厂哪里有什么培养制度,由于成本的问题,人家更希望你来能直接干活,所以你投小厂也很难投。基本就是死局,也不一定非要走后端这条路。可以再学一学后端之后走测试或者前端。 除此之外,不要相信任何付费改简历的。你这份简历没有改的必要了,先沉淀沉淀
点赞 评论 收藏
分享
评论
4
7
分享

创作者周榜

更多
牛客网
牛客企业服务