美团25日实习软开笔试

##有出错的地方麻烦各位大佬指教!!!

美团C++转正实习

  • 时间:2023/3/25

  • 完成情况:3/5

  • 时长:2h

  • 自我总结:第一次使用ACM模式,输入输出上不熟悉花了较长时间

  • 五道编程题

    • ==第一道:==验证出入栈顺序有效性,leetcode原题,当时文字太多,没有静下心好好审题直接跳过了,血亏

    • #include<iostream>
      #include<algorithm>
      #include<vector>
      #include<stack>
      
      using namespace std;
      bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
          int s1 = pushed.size();
          stack<int> sta;
          sta.push(pushed[0]);
          int i = 1;
          int j = 0;
          bool res;
          while (!sta.empty()) {
              if (sta.top() != popped[j]) {
                  if (i >= s1) {
                      return  false;
                  }
                  sta.push(pushed[i]);
                  i++;
      
              }
              else {
                  sta.pop();
                  j++;
                  if (sta.empty() && i < s1) {
                      sta.push(pushed[i]);
                      i++;
                  }
              }
          }
          return true;
      
      }
      
      int main() {
          bool res;
          vector<int> pushed;
          vector<int> poped;
          int n;
          cin >> n;
          int num1;
          while (n > 0 && cin >> num1) {
              pushed.push_back(num1);
              n--;
          }
          int m;
          cin >> m;
          while (m > 0 && cin >> num1) {
              poped.push_back(num1);
              m--;
          }
          res = validateStackSequences(pushed, poped);
          cout << res << endl;
      
          return 0;
      }
      
    • ==第二道:== 动态规划,跟leetcode打家劫舍差不多,要求选了a[i],就不能选a[i-1],a[i -2],a[i+1],a[i +2], 给你一个数组代表a[i]的值,求怎么选最大。

    • dp[i]代表数组长度i所能选到的最大值

    • 状态转移方程:dp[i] = max(dp[i-1], dp[i -3] + a[i])

    • #include<iostream>
      #include<algorithm>
      #include<vector>
      #include<stack>
      
      using namespace std;
      
      int choice(vector<int>& a) {
          int len = a.size();
          vector<int> dp(len);
          dp[0] = a[0];
          if (len >= 2) {
              dp[1] = max(a[0], a[1]);
              if (len >= 3) {
                  dp[2] = max( dp[1], a[2]);
              }
          }
          for (int i = 3; i < len; i++) {
              int tmp = dp[i - 3] + a[i];
              dp[i] = max(dp[i - 1], tmp);
          }
          return dp[len - 1];
      }
      
      int main() {
          int res;
          vector<int> a;
          int n;
          cin >> n;
          int num1;
          while (n > 0 && cin >> num1) {
              a.push_back(num1);
              n--;
          }
          res = choice(a);
      
          cout << res << endl;
      
          return 0;
      }
      
    • ==第三道==: 0-1背包问题,n块巧克力板,边长为a[i], 重量为a[i]*a[i], m 个背包, 可以装重量为b[i], 求每个背包最多可以装多少

    • 思路: 可以对巧克力板按重量从小到大排序,前缀和即可

    • #include<iostream>
      #include<algorithm>
      #include<vector>
      #include<stack>
      
      using namespace std;
      
      int large(vector<int>& a, int b) {
          int sum = 0;
          int len = a.size();
          int i;
          for (i = 0; i < len; i++) {
              sum += a[i];
              if (sum > b) {
                  break;
              }
          }
          return i;
      }
      
      int main() {
          int n, m;
          cin >> n >> m;
          vector<int> a, b;
          int ins;
          while (n > 0 && cin >> ins) {
              a.push_back(ins * ins);
              n--;
          }
          while (m > 0 && cin >> ins) {
              b.push_back(ins);
              m--;
          }
          sort(a.begin(), a.end());
          for (int tmp : b) {
              cout << large(a, tmp)<< " ";
          }
          cout << endl;
      
          return 0;
      }
      
    • ==第四道:==字符分割, 如给你一串字符“path=/chat.openai.com, language=c++, path=baidu.com", 输入 2 path language,输出 baidu.com c++

    • 使用unordered_map

    • #include<iostream>
      #include<vector>
      #include<string>
      #include<unordered_map>
      
      using namespace std;
      
      
      int main() {
          string str;
          getline(cin, str);
          unordered_map<string, string> mmap;
          //字符分割
          for (int i = 0; i < str.size(); i++) {
              int start = i;
              while (start < str.size() && str[start] != '=') {
                  start++;
              }
              string str2 = str.substr(i, start - i);
              int start2 = start + 1;
              while (start2 < str.size() && str[start2] != ',') {
                  start2++;
              }
              string str3 = str.substr(start + 1 , start2 - start - 1);
              i = start2;
              //此处说相同的key取后者的value,应该直接替代是没有问题的
              mmap[str2] = str3;
          }
          //输入验证
          int n;
          cin >> n;
          string str4;
          vector<string> vec;
          while (n > 0 && cin >> str4) {
              vec.push_back(str4);
              n--;
          }
          for (string& strTmp : vec) {
              if (mmap.count(strTmp) >= 1) {
                  cout << mmap[strTmp] << endl;
              }
              else {
                  cout << "EMPTY" << endl;
              }
          }
          return 0;
      }
      
    • ==第五道:==给你一个每一天糖果的美味值数组,只能隔天吃,但也可以反悔,有K次反悔机会

    • 思路:先用打家劫舍的方法,然后对对没有选的取k个最大值

    • #include<iostream>
      #include<vector>
      #include<string>
      #include<unordered_map>
      #include<queue>
      
      using namespace std;
      int maxTaste(int k, vector<int>& vec) {
          int len = vec.size();
          vector<int> dp(len);
          dp[0] = vec[0];
          if (len == 1) {
              return dp[0];
          }
          vector<bool> used(len, false);
          if (len >= 2) {
              dp[1] = max(dp[0], vec[1]);
              if (len == 2) {
                  if (k > 0) {
                      return vec[0] + vec[1];
                  }
                  else {
                      return dp[1];
                  }
              }
          }
          for (int i = 2; i < len; i++) {
              dp[i] = max(dp[i - 2] + vec[i], dp[i - 1]);
          }
         //判断最后一个选了没
          bool jus;
          if (dp[len - 3] + vec[len - 1] > dp[len - 2]) {
              jus = true;
          }
          else {
              jus = false;
          }
          priority_queue<int, vector<int>, less<int>> pq;
          if (!jus) {
              for (int i = len - 1; i > 0; i = i - 2) {
                  pq.push(vec[i]);
              }
          }
          else {
              for (int i = len - 2; i > 0; i = i - 2) {
                  pq.push(vec[i]);
              }
          }
          int res = dp[len - 1];
          for (int i = 0; i < k; i++) {
              res += pq.top();
              pq.pop();
          }
          return res;
      
      
      
      }
      
      int main() {
          //反悔次数
          int k;
          cin >> k;
          //输入美味值
          int n;  //天数
          cin >> n;
          vector<int> vec;
          int  num;
          while (n > 0 && cin >> num) {
              vec.push_back(num);
              n--;
          }
          cout << maxTaste(k, vec) << endl;
          return 0;
      }
      
#美团笔试#
全部评论
美团转正是必须参加笔试吗?
1 回复 分享
发布于 2023-03-27 22:00 辽宁
背包那个 用前缀和或者直接累加,容易越界吧我记得(
点赞 回复 分享
发布于 2023-03-28 09:44 陕西
突出一个:打家劫舍
点赞 回复 分享
发布于 2023-03-27 17:03 广东

相关推荐

TCL前端笔试题目:以下是一些&nbsp;TCL&nbsp;华星前端笔试题目:以下关于&nbsp;HTML5&nbsp;语义化标签的说法,错误的是?在&nbsp;CSS&nbsp;中,以下哪个属性用于设置元素的定位方式?以下哪种不是前端性能优化的常见方法?当使用&nbsp;Flex&nbsp;布局时,以下哪个属性用于设置子元素在主轴上的对齐方式?简答题请简述&nbsp;HTML、CSS&nbsp;和&nbsp;JavaScript&nbsp;在前端开发中的作用分别是什么,以及它们之间的关系。解释一下什么是浏览器的回流(reflow)和重绘(repaint),并说明如何避免或减少它们对性能的影响。列举三种你熟悉的前端框架,并简要说明它们的特点和适用场景。如何实现一个响应式布局,使其在不同屏幕尺寸的设备上都能有良好的显示效果?请列举至少两种常用的技术或方法。描述一下&nbsp;JavaScript&nbsp;中事件冒泡和事件捕获的概念,并说明如何阻止事件冒泡。编程题请使用&nbsp;HTML&nbsp;和&nbsp;CSS&nbsp;创建一个简单的导航栏,要求包含至少三个导航项,并且当鼠标悬停在导航项上时,有相应的样式变化。编写一个&nbsp;JavaScript&nbsp;函数,实现对一个数组进行去重操作,返回去重后的新数组。用&nbsp;HTML、CSS&nbsp;和&nbsp;JavaScript&nbsp;实现一个简单的轮播图效果,要求可以自动播放,并且用户能够手动切换图片。TCL实业2025届春招正式启动!【公司简介】✅聚焦智能终端业务,主要涵盖显示、智能家电、创新业务及家庭互联网等全品类智能消费电子产品及服务✅业务遍及160多个国家和地区,全球有20个智能制造基地,2023年,TCL实业实现营业总收入1203.2亿元【招聘岗位】研发技术类、产品设计类、市场营销类、智能制造类、供应链类、财务金融类、综合管理类(TCL实业和TCL华星共用招聘系统,两家子公司一共只能投递两个岗位)【工作地点】深圳、惠州、中山、上海、武汉、西安等全国各地及海外城市TCL实业【内推链接】https://wecruit.hotjob.cn/SU6491506a2f9d24316e91b81b/mc/position/campus?acotycoCode=pchbbd&amp;amp;amp;recruitType=1&amp;amp;amp;isLimitShowPostScope=1【内推码】pchbbd(🌟内推投递,简历优先筛选,面试流程加快,TCL期待你的加入!)大家投递完可以在评论区打上姓名缩写+岗位,我来确认有没有内推成功喽 #校招#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#内推#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#内推码#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#秋招#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#tcl#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
点赞 评论 收藏
分享
评论
10
32
分享

创作者周榜

更多
牛客网
牛客企业服务