码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【leetcode周赛记录——405】


    405周赛记录

    • #1.leetcode100339_找出加密后的字符串
    • 2.leetcode100328_生成不含相邻零的二进制字符串
    • 3.leetcode100359_统计X和Y频数相等的子矩阵数量
    • 4.leetcode100350_最小代价构造字符串

    刷了一段时间算法了,打打周赛看看什么水平了

    #1.leetcode100339_找出加密后的字符串

    在这里插入图片描述
    思路:感觉还是挺简单的,第一次还以为是字典序的后k位,审题不认真。。。
    偷了个懒,忘记怎么原地修改数组了,感觉要用辅助空间,还是直接库函数吧
    用后k位字符替换,其实就是把后k位提前嘛
    1,2,… ,k-1,k,k+1,…,size
    1+k,k,… ,size,1,2,…,k

    	string getEncryptedString(string s, int k) {
            k = k % s.size();
            return s.substr(k, s.size()) + s.substr(0, k);
        }
    

    2.leetcode100328_生成不含相邻零的二进制字符串

    在这里插入图片描述
    思路:回溯,如果当前是0,下一个就不是0,除此之外,下一个都可以是1

    class Solution {
        vector<string> res;
        string path;
    public:
        void backtracking(int n) {
            if(path.size() == n) {
                res.push_back(path);
                return;
            }
            if(path == "" || path.back() != '0') {
                path += '0';
                backtracking(n);
                path.pop_back();
            }
    
            path += '1';
            backtracking(n);
            path.pop_back();
    
            return;
        }
        vector<string> validStrings(int n) {
            res.clear();
            path.clear();
            backtracking(n);
            
            return res;
        }
    };
    

    3.leetcode100359_统计X和Y频数相等的子矩阵数量

    在这里插入图片描述
    思路:动态规划吧,dp[i] = dp[i-1][j-1] + (dp[i-1][j] - dp[i-1][j-1]) + (dp[i][j-1] - dp[i-1][j-1])
    大概思路就是以示例1为例
    dp[i][j]初始化为1; 更新为2
    dp[i][j] =

    	// dp[i][j] 表示 从左上角开始长为i宽为j的矩形所含有的 x和 y的数量
    
    class Solution {
    public:
        int numberOfSubmatrices(vector<vector<char>>& grid) {
            int m = grid.size();
            int n = grid[0].size();
            vector<vector<pair<int, int>>> dp(m, vector<pair<int, int>>(n, {0, 0}));
            
            if(grid[0][0] == 'X'){
                dp[0][0].first = 1;
            } else if(grid[0][0] == 'Y') {
                dp[0][0].second = 1;
            }
            
            for(int i = 1; i < m; i++){
                dp[i][0] = dp[i-1][0];
                if(grid[i][0] == 'X'){
                    dp[i][0].first++;
                } else if(grid[i][0] == 'Y') {
                    dp[i][0].second++;
                }
            }
            
            for(int j = 1; j < n; j++){
                dp[0][j] = dp[0][j-1];
                if(grid[0][j] == 'X'){
                    dp[0][j].first++;
                } else if(grid[0][j] == 'Y') {
                    dp[0][j].second++;
                }
            }
            
    //         cout << "1. === \n";
    
    //         for(int i = 0; i < m; i++) {
    //             for(int j = 0; j < n; j++){
    //                 cout << "(" << dp[i][j].first << "," << dp[i][j].second << "), ";
    //             }
    //             cout << endl;
    //         }
            
            for(int i = 1; i < m; i++)
                for(int j = 1; j < n; j++) {
                    dp[i][j].first = dp[i][j-1].first + dp[i-1][j].first - dp[i-1][j-1].first;
                    dp[i][j].second = dp[i][j-1].second + dp[i-1][j].second - dp[i-1][j-1].second;
                    if(grid[i][j] == 'X'){
                        dp[i][j].first++;
                    }
                    else if(grid[i][j] == 'Y'){                    
                        dp[i][j].second++;
                    }
                }
            
            int res = 0;
            
    //         cout << "2. === \n";
    
    //         for(int i = 0; i < m; i++) {
    //             for(int j = 0; j < n; j++){
    //                 cout << "(" << dp[i][j].first << "," << dp[i][j].second << "), ";
    //             }
    //             cout << endl;
    //         }
            
            for(int i = 0; i < m; i++)
                for(int j = 0; j < n; j++){
                    if(dp[i][j].first != 0 && dp[i][j].first == dp[i][j].second)
                        res++;  
                }
            return res;
        }
    };
    

    还行,差不多一个半小时做了三道题,比以前能强点,比最近一年强很多😀

    4.leetcode100350_最小代价构造字符串

    在这里插入图片描述
    思路:困难题,看到就想放弃了,但是想一想吧。。
    我的理解是像是一个完全背包问题,但又不完全是,
    分两步,第一步看能不能组成字符串,这里想不到,感觉回溯了
    第二部算最少花费,这里属于完全背包了
    cost[i]花费,
    2. 有感觉有点像模式串匹配呀,是不是next数组能用上呢
    3. 没思路。。。

  • 相关阅读:
    计算机网络基础的一些零散知识要点
    worthington组织解离指南——上皮组织&结缔组织
    redis数据库
    (附源码)APP+springboot个人健康管理 毕业设计 202031
    【Ctool】json 转 mysql
    SpringBoot基础(六)-- 辅助功能之一 -- 内嵌tomcat
    springboot解决@Autowired注入service时出现循环依赖问题
    自动化方案不合理的原因浅析
    【云原生之Docker实战】使用Docker部署Kavita 个人漫画服务器
    公交查询系统
  • 原文地址:https://blog.csdn.net/qq_42898600/article/details/140252630
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号