zoukankan      html  css  js  c++  java
  • LeetCode 第 201 场周赛

    整理字符串

     1 class Solution {
     2 public:
     3     string makeGood(string s) {
     4         stack<char> v;
     5         int n = s.size();
     6         for (int i = 0; i < n; i++) {
     7             char c1 = s[i];
     8             if (v.size()) {
     9                 char c2 = v.top();
    10                 if (abs(c1 - c2) == 32) v.pop();
    11                 else v.push(c1);
    12             } else {
    13                 v.push(c1);
    14             }
    15         }
    16         s = "";
    17         while (v.size()) {
    18             char c = v.top();
    19             v.pop();
    20             s = s + c;
    21         }
    22         reverse(s.begin(), s.end());
    23         return s;
    24     }
    25 };
    View Code

    找出第 N 个二进制字符串中的第 K 位

     1 class Solution {
     2 public:
     3     char findKthBit(int n, int k) {
     4         string s[30];
     5         s[1] = "0";
     6         for (int i = 2; i <= n; i++) {
     7             string p = s[i - 1];
     8             for (int j = 0; j < p.size(); j++) {
     9                 if (p[j] == '0') p[j] = '1';
    10                 else p[j] = '0';
    11             }
    12             reverse(p.begin(), p.end());
    13             s[i] = s[i - 1] + "1" + p;
    14         }
    15         return s[n][k - 1];
    16     }
    17 };
    View Code

    和为目标值的最大数目不重叠非空子数组数目

    前缀和,贪心,用map标记一下前缀和,得到target,清空下map,记得每次更新都要把map[0] = 1,不然会缺少情况。

     1 class Solution {
     2 public:
     3     int maxNonOverlapping(vector<int>& nums, int target) {
     4         int n = nums.size();
     5         map<int, int> m;
     6         int ans = 0, sum = 0;
     7         m[0] = 1;
     8         for (int i = 0; i < n; i++) {
     9             sum += nums[i];
    10             if (m[sum - target]) {
    11                 ans++; 
    12                 m.clear();
    13                 m[0] = 1;
    14                 sum = 0;
    15             } else {
    16                 m[sum] = 1;
    17             }
    18         }
    19         return ans;
    20     }
    21 };
    View Code

    切棍子的最小成本

    很典型的区间DP,一开始没想到...,还以为是个贪心。

    动态转移方程:$dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + cost[i][j])$,$dp[i][j]$表示从第i个切割点到第j个切割点之间的最少代价,枚举分割点i和j之间所有的切割点k,寻找最优值。

     1 class Solution {
     2 public:
     3     int minCost(int n, vector<int>& cuts) {        
     4         cuts.push_back(0);
     5         cuts.push_back(n);
     6         int m = cuts.size();
     7         vector< vector<int> > dp(m, vector<int>(m, 0x3f3f3f3f));
     8         sort(cuts.begin(), cuts.end());
     9         dp[0][0] = 0;
    10         for (int i = 1; i < m; ++i){
    11             dp[i][i] = 0;
    12             dp[i - 1][i] = 0;
    13         }
    14         for (int i = m - 2; i >= 0; i--){
    15             for (int j = i + 1; j < m; j++){
    16                 for (int k = i + 1; k < j; k++){
    17                     int cost = cuts[j] - cuts[i];
    18                     dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + cost);
    19                 }
    20             }
    21         }
    22         return dp[0][m-1];
    23     }
    24 };
    View Code
  • 相关阅读:
    spring学习(二十九)--参数绑定注解
    spring学习(二十八)--@Async线程池
    spring学习(二十七)--@Async
    spring学习(二十六)--@ContextConfiguration、@RunWith(SpringJUnit4ClassRunner.class)、@ComponentScan
    ## ansible 批量在远程主机上执行命令 ##
    Celery
    Flask-Script
    Flask-SQLAlchemy
    SQLAlchemy
    数据库连接池
  • 原文地址:https://www.cnblogs.com/pavtlly/p/13882008.html
Copyright © 2011-2022 走看看