zoukankan      html  css  js  c++  java
  • LeetCode Weekly Contest 27

    1. 557. Reverse Words in a String III

    分割字符串,翻转。

     1 class Solution {
     2 public:
     3 string reverseWords(string s) {
     4     int n = s.size();
     5     if(n < 2) return s;
     6     string res;
     7     int i = 0;
     8     n += 1;
     9     s += " ";
    10     int last = 0;
    11     while(i < n) {
    12         last = i;
    13         while(i < n && s[i] != ' ') i++;
    14         string t = s.substr(last, i - last);
    15         reverse(t.begin(), t.end());
    16         res += t + " ";
    17         i++;
    18     }
    19     return res.substr(0, n - 1);
    20 }
    21 };
    View Code

    2. 554. Brick Wall

    这刚好是以前做的hihocode的一道题目:https://hihocoder.com/problemset/problem/1494

    就是统计边界的最大次数,然后n- max求出最小的穿过次数。

     1 class Solution {
     2 public:
     3 int leastBricks(vector<vector<int>>& wall) {
     4     int n = wall.size();
     5     if(n == 0) return 0;
     6     map<int, int> ma;
     7     int res = 0;
     8     for (vector<int> &it:wall) {
     9         int m = it.size();
    10         int s = 0;
    11         for (int i = 0; i < m - 1; i++) {
    12             s += it[i];
    13             ma[s]++;
    14             res = max(res, ma[s]);
    15         }
    16     }
    17     return n - res;
    18 }
    19 };
    View Code

    3. 556. Next Greater Element III

    要求下一个比较大的,可以采用next_permutation来做,然后判断下是不是真的比n大,然后还要check是否超过int的表示范围。

     1 class Solution {
     2 public:
     3 int nextGreaterElement(int n) {
     4     if(n < 10) return -1;
     5     vector<int> v;
     6     int t = n;
     7     while(t > 0) {
     8         v.push_back(t % 10);
     9         t /= 10;
    10     }
    11     int sz = v.size();
    12     //cout << sz << endl;
    13     if(sz == 1) return -1;
    14     reverse(v.begin(), v.end());
    15     if(next_permutation(v.begin(), v.end())) {
    16         long long res = 0;
    17         for (int t : v) {
    18             res = res * 10 + t;
    19         }
    20         if(res > INT_MAX)
    21             return -1;
    22         return res;
    23     } else
    24     return -1;
    25 }
    26 };
    View Code

    4. 549. Binary Tree Longest Consecutive Sequence II

    这个题跟求二叉树的最长路径的方法是一致的,维护信息,以及更新结果。

    我当时写的有点复杂,只需要维护每个点的最长上升和下降长度就行。注意:题目要求必须连续。

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12 int res;
    13 typedef pair<pair<int, int>, pair<int, int>> pp;
    14 typedef pair<int, int> pii;
    15 pair<pair<int, int>, pair<int, int>> work(TreeNode* root) {
    16     if(!root) {
    17         return {{0,0}, {0, 0} };
    18     }
    19     if(!root->left && !root->right) {
    20         int v = root->val;
    21         res = max(res, 1);
    22         return {{1, v}, {1, v} };
    23     }
    24     int v = root->val;
    25     pp m1 = work(root->left), m2 = work(root->right);
    26     int a1 = m1.first.first, a2 = m1.first.second, b1 = m1.second.first, b2 = m1.second.second;
    27     int ta1 = m2.first.first, ta2 = m2.first.second, tb1 = m2.second.first, tb2 = m2.second.second;
    28     int ra1 = 1, ra2 = v, rb1 = 1, rb2 = v;
    29     if(v == a2 + 1) {
    30         ra1  = a1 + 1;
    31     }
    32     if(v == ta2 + 1) {
    33         ra1 = max(ra1, ta1 + 1);
    34     }
    35     if(v == b2 - 1) {
    36         rb1 = b1 + 1;
    37     }
    38     if(v == tb2 - 1) {
    39         rb1 = max(rb1, tb1 + 1);
    40     }
    41     if(v == a2 + 1 && v == tb2 - 1) {
    42         res = max(res, 1 + a1 + tb1);
    43     }
    44     if(v == ta2 + 1 && v == b2 - 1) {
    45         res = max(res, 1 + ta1 + b1);
    46     }
    47     res = max(res, max(ra1, rb1));
    48     return {{ra1, ra2}, {rb1, rb2} };
    49 
    50 }
    51 int longestConsecutive(TreeNode* root) {
    52     if(!root) return 0;
    53     res = 0;
    54     work(root);
    55     return res;
    56 }
    57 };
    View Code
  • 相关阅读:
    人类登月不可或缺 大型机半个世纪发展史
    宽带上网知识(如何进行上网流程配置,路由器上网配置)
    团队项目第二阶段——第二天
    用户体验评价之QQ浏览器
    团队项目第二阶段——第一天
    第十四周学习进度总结
    《梦断代码》阅读笔记02
    第十三周学习进度总结
    第一阶段意见评论
    第十二周学习进度总结
  • 原文地址:https://www.cnblogs.com/y119777/p/6699844.html
Copyright © 2011-2022 走看看