首页 > 其他分享 >LeetCode 周赛上分之旅 # 37 多源 BFS 与连通性问题

LeetCode 周赛上分之旅 # 37 多源 BFS 与连通性问题

时间:2023-08-07 12:34:14浏览次数:45  
标签:node 周赛 连通性 val 复杂度 safe 37 newX newY

⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。

学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。

本文是 LeetCode 上分之旅系列的第 37 篇文章,往期回顾请移步到文章末尾~

周赛 357

T1. 故障键盘(Easy)

  • 标签:模拟、字符串

T2. 判断是否能拆分数组(Medium)

  • 标签:思维

T3. 找出最安全路径(Medium)

  • 标签:BFS、连通性、分层并查集、极大化极小、二分查找

T4. 子序列最大优雅度(Hard)

  • 标签:贪心、排序、堆


T1. 故障键盘(Easy)

https://leetcode.cn/problems/faulty-keyboard/

题解(模拟)

简单模拟题。

  • 在遇到 i 字符时对已填入字符进行反转,时间复杂度是 O(n^2);
  • 使用队列和标记位可以优化时间复杂度,在遇到 i 时修改标记位和写入方向,在最后输出时根据标记位输出,避免中间的反转操作。
class Solution {
public:
    string finalString(string s) {
        vector<char> dst;
        for (auto& c : s) {
            if (c == 'i') {
                reverse(dst.begin(), dst.end());
            } else {
                dst.push_back(c);
            }
        }
        return string(dst.begin(), dst.end());
    }
};
class Solution {
public:
    string finalString(string s) {
        deque<char> dst;
        bool rear = true;
        for (auto& c : s) {
            if (c == 'i') {
                rear = !rear;
            } else {
                if (rear) {
                    dst.push_back(c);
                } else {
                    dst.push_front(c);
                }
            }
        }
        return rear ? string(dst.begin(), dst.end()) : string(dst.rbegin(), dst.rend());
    }
};

复杂度分析:

  • 时间复杂度:$O(n)$ 线性遍历和输出时间;
  • 空间复杂度:$O(n)$ 临时字符串空间。

T2. 判断是否能拆分数组(Medium)

https://leetcode.cn/problems/check-if-it-is-possible-to-split-array/

题解(思维题)

思维题,主要题目的两个条件只要满足其中一个即可

标签:node,周赛,连通性,val,复杂度,safe,37,newX,newY
From: https://www.cnblogs.com/pengxurui/p/17611136.html

相关文章

  • Leetcode第357场周赛
    https://leetcode.cn/contest/weekly-contest-357/C寻找不安全路径以所有小偷点为源点,跑多源点BFS,求出每个点到最近小偷点的曼哈顿距离,记为w[i,j]二分答案Mid,只允许走w[i,j]>=mid的点,从源店跑DFS/BFS,看是否能抵达汇点。D子序列最大优雅度反悔贪心,首先将所有项目按照利......
  • 357周赛
    故障键盘水题。classSolution{public:stringfinalString(strings){stringres;for(charc:s){if(c=='i'){reverse(res.begin(),res.end());}else{res+=c;......
  • 【动态规划】【力扣357次周赛】6953. 判断是否能拆分数组
    【力扣357次周赛】6953.判断是否能拆分数组给你一个长度为n的数组nums和一个整数m。请你判断能否执行一系列操作,将数组拆分成n个非空数组。在每一步操作中,你可以选择一个长度至少为2的现有数组(之前步骤的结果)并将其拆分成2个子数组,而得到的每个子数组,至少需......
  • P9437 『XYGOI round1』一棵树 题解
    赛时一眼换根dp,然后调调调了大概1h+。题目传送门什么是换根dp在大多数树形dp中,我们只考虑对根的贡献,而一部分题目需要算出对所有点的贡献,一个比较显然的做法是对每个点都跑一次树形dp,但是大大增加了时间复杂度,是我们不能接受的。树形dp中的换根dp问题又被称为二次扫......
  • 离线安装Superset 0.37(截图详细版)
    上文提到了Superset0.37的在线安装方式,只需要更新pip,然后pipinstall就可以了。但是在生产环境中,特别是内网环境中,很多时候是没有外网的,这时候就需要采取离线安装的方式。本文将详细介绍在Linux系统中离线安装Superset的全过程,并整理了安装过程中遇到的错误。下载相关安装包注:本文......
  • Windows系统快速安装Superset 0.37
    Windows系统安装Superset0.37Superset 是一款由Airbnb开源的“现代化的企业级BI(商业智能)Web应用程序”,其通过创建和分享dashboard,为数据分析提供了轻量级的数据查询和可视化方案。windows系统下安装superset大同小异,本文通过Win10系统演示整个安装过程。win10安装python3.......
  • Beckhoff EL7037参数设置及寻参模块的测试
    参数设置I/O-Devices-Device3(找到对应的设备)-Term1(EK1100)-Term2(EL7031)-CoeOnline8010:01最大电流设置为600mA;8010:02保持电流设置为300mA;8010:03正常电压设置为24000mV;8010:06满步设置为200,表示1圈走200个脉冲;备注:以上参数和具体电机型号有关。8012:01:操作模式......
  • 牛客周赛 Round 5
    牛客周赛Round5A-游游的字母变换_牛客周赛Round5(nowcoder.com)#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;signedmain(){ ios::sync_with_stdio(false); cin.tie(nullptr); strings;cin>>s;for(inti=0;i<s.size......
  • Java面试题 P37:数据库篇:MySql篇-事务-事务中的隔离性是如何保证的呢?
    锁:排它锁(如一个事务获取了一个数据行的排它锁,其他事务就不能再获取该行的其他锁),insertupdatedelete都是用了排它锁mvcc:多版本并发控制。你解释一下mvcc?           ......
  • LeetCode 周赛上分之旅 # 36 KMP 字符串匹配殊途同归
    ⭐️本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]和BaguTreePro知识星球提问。学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场LeetCode周赛的解题报告,一......