当前位置:   article > 正文

力扣314周赛_leetcode周赛分数预测

leetcode周赛分数预测

总结:相比于上周排名,这周排名提高了,估计竞赛积分也会提高。

这次也是只做了俩道题目

 第一题

  1. class Solution {
  2. public:
  3. int hardestWorker(int n, vector<vector<int>>& log) {
  4. int fmax=log[0][1];
  5. int k=log[0][0];
  6. int end=log[0][1];
  7. for(int i=1;i<log.size();i++)
  8. {
  9. if(fmax<log[i][1]-end)
  10. {
  11. fmax=log[i][1]-end;
  12. k=log[i][0];
  13. }
  14. else
  15. if(fmax==log[i][1]-end)
  16. {
  17. if(k>log[i][0])
  18. k=log[i][0];
  19. }
  20. end=log[i][1];
  21. }
  22. return k;
  23. }
  24. };

错了俩次。才交对,明明是简单题目。

我第一次错在没有看到在同等时长下,优先小编号,就是只有>的情况

我第二次错在忘记写进行比较小编号了,在==的情况下,我忘记判断了

非常可惜

 第二题

  1. class Solution {
  2. public:
  3. vector<int> findArray(vector<int>& pref) {
  4. vector<int>res;
  5. res.push_back(pref[0]);
  6. if(pref.size()<=1)
  7. return res;
  8. for(int i=1;i<pref.size();i++)
  9. {
  10. int a=pref[i];
  11. int b=pref[i-1];
  12. res.push_back(a^b);
  13. }
  14. return res;
  15. }
  16. };

这个一次过,但是想了很久。

根据性质,a^b 相同为0,不相同为1,a^*=c ;即使

当c为0的部分,a为1的部分,*里面也有为1.要不然就是a为0的部分,*也有为0.

当c为1的部分,a为1的部分,*为0,a为0的部分,a为1.

综上所述。发现正好也符合a^b=*的思路

 虽然很菜但是还是想贴一下排名,督促自己进步

  

 争取早日回到自己的巅峰时刻


然后对其他没有做出来的题目理解

第三题

我看的题解

解法:贪心

本题是经典贪心:求出栈序列的最小字典序。

我们首先将题目描述进行转化:有一个初始为空的栈,给定字符的入栈顺序,求字典序最小的出栈序列。

当一个字符入栈后,我们持续检查栈顶元素 ccc。设还未入栈的字符中,字典序最小的字符是 mmm,有以下两种情况。

    c≤mc \le mc≤m:此时弹出 ccc 最优。如果此时按兵不动,下一个出栈的将会是大等于 ccc 的字符,答案不会变优。
    c>mc > mc>m:此时不弹出 ccc,等待后续更小的字符入栈。

所有字符都入栈后,栈内的剩余字符按顺序弹出即可。复杂度 O(n)\mathcal{O}(n)O(n)。

作者:tsreaper
链接:https://leetcode.cn/problems/using-a-robot-to-print-the-lexicographically-smallest-string/solution/by-tsreaper-sx1s/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

作者的题解讲述

  1. class Solution {
  2. public:
  3. string robotWithString(string s) {
  4. int n = s.size();
  5. vector<char> f(n + 1);
  6. f[n] = 'z' + 1;
  7. for (int i = n - 1; i >= 0; i--) f[i] = min(f[i + 1], s[i]);
  8. string ans;
  9. stack<char> stk;
  10. for (int i = 0; i < n; i++) {
  11. stk.push(s[i]);
  12. while (!stk.empty() && stk.top() <= f[i + 1]) ans.push_back(stk.top()), stk.pop();
  13. }
  14. return ans;
  15. }
  16. };

然后说一下我对题解的理解。首先我也是第一次接触字典序这个说法

字典序:字典序字典序是指按照字典中出现的先后顺序进行排序。

然后个根据贪心思想,我们要尽可能把数字最小的放在前面

题目是说把s前面的数字,放到t后面,然后t从后面再放在我的结果里面

我们一定要保证我们的结果是最优解。那么我们必须让最小的数字优先输出。所以我们从后面开始遍历,前后比,这样子到了最前面,就一定是最小的字符,后面都是除了前面的字符,那么他就是最小的字符了。

 然后后面就很栈的思路一样,先进后出,如果我这个数不是当前里面最小的数字

至于为什么是<f[i+1]里面的f[i+1]我也不懂为什么。希望有评论区大佬可以教教我

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/860468
推荐阅读
相关标签
  

闽ICP备14008679号