LeetCode 第 199 场周赛详解

概率论与数理统计基础概念与重要定义汇总 文章目录一、随机事件和概率1:互斥,对立,独立事件的定义和性质。2:概率,条件概率和五大概率公式3:古典型,几何型概率和伯努利试验 一、随机事件和概率 1:互斥,对立,独立事件的定义和性质。 互斥事件\color{red}\textbf{互斥事件}互斥事件 事件A和B的交集为空,A与B就是互斥事件,也叫互不相容事件。也可叙述为:不可能同时发生的事件。如A∩B为不可能事件(A∩B=Φ),那么称事件A与事件B互斥,其含义是:事件A与事件B在任何一次试验中不会同时发生。 则P(A+B)=P(A)+P(B)(这个公 阅读详情

LeetCode 第 199 场周赛

1.重新排列字符串[原题链接]

题意:

给你一个字符串 s 和一个长度相同的整数数组 indices 。

请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。

返回重新排列后的字符串。

数据范围:

s.length == indices.length == n
1 <= n <= 100
0 <= indices[i] < n
indices 的所有的值都是唯一的

思路:

简单的枚举即可

代码:
class Solution {
public:
    string restoreString(string s, vector<int>& indices) {
        int n = s.size();
        string r(s);
        
        for (int k = 0; k < n; ++k) r[indices[k]] = s[k];
        return r;
    }
};

2.灯泡开关 IV[原题链接]

题意:

房间中有 n 个灯泡,编号从 0 到 n-1 ,自左向右排成一行。最开始的时候,所有的灯泡都是 关 着的。请你设法使得灯泡的开关状态和 target 描述的状态一致,其中 target[i] 等于 1 意味着第 i个灯泡是开着的,等于 0 意味着第 i 个灯是关着的。

有一个开关可以用于翻转灯泡的状态,翻转操作定义如下:选择当前配置下的任意一个灯泡(下标为 i )翻转下标从 i 到 n-1 的每个灯泡翻转时,如果灯泡的状态为 0 就变为 1,为 1 就变为 0 。

返回达成 target 描述的状态所需的 最少 翻转次数。

数据范围:

1 <= target.length <= 1e5
target[i] == '0' 或者 target[i] == '1'

思路:

可以想象,前面的操作会导致后面灯不断地发生变化,那么我们是不是要记录下每次操作后,后面灯地状态呢?这里其实是没必要的,而且由于数据量较大也不能AC。换个角度想,当枚举到 a[i] 时,那么 a[0], a[1] ....a[i - 1] 一定是亮着的,所以当 a[i] == a[i - 1] 那么就不用对 a[i] 操作,因为 a[i], a[i - 1] 被操作的次数是一样的,所以 a[i] 也是亮的。如果不一样则需要操作。
另外需要 state = '0'。

代码:
class Solution {
public:
    int minFlips(string target) {
        int ret = 0;
        char state = '0';
        for (auto & v : target) {
            if (state != v) {
                state = v;
                ++ret;
            }
        }
        
        return ret;
    }
};

3.好叶子节点对的数量[原题链接]

题意:

给你二叉树的根节点 root 和一个整数 distance 。

如果二叉树中两个叶节点之间的最短路径长度小于或者等于 distance ,那它们就可以构成一组好叶子节点对 。

返回树中好叶子节点对的数量 。

数据范围:

tree 的节点数在 [1, 2^10] 范围内
每个节点的值都在 [1, 100] 之间
1 <= distance <= 10

思路:

我们可以记录对于每个节点,该节点所有叶子节点到该节点的距离,那么我们就可以计算该节点的左子树的叶节点与右子树节点组成的节点对的距离。这里思考一下是可以遍历所有节点对的。

代码:
class Solution {
public:
    
    int dist, ret;
    int countPairs(TreeNode* root, int dist) {
        this->dist = dist; this->ret = 0;
        diff(root);
        
        return ret;
    }
    
    vector<int> diff(TreeNode* root) {
        if (!root) return {};
        if (!root->left && !root->right) return {0};
     
        auto L = diff(root->left);
        auto R = diff(root->right);
        for (auto & lv : L)
            for (auto & rv : R)
                if (lv + rv + 2 <= dist) ++ret;
        vector<int> Ro;
        for (auto & v : L) Ro.push_back(v + 1);
        for (auto & v : R) Ro.push_back(v + 1);
        
        return Ro;
    }
};

Ro 表示根节点 root 的子树所有节点到 root 的距离。

4.压缩字符串 II[原题链接]

题意:

行程长度编码是一种常用的字符串压缩方法,它将连续的相同字符(重复 2 次或更多次)替换为字符和表示字符计数的数字(行程长度)。例如,用此方法压缩字符串 "aabccc" ,将 "aa" 替换为 "a2" ,"ccc" 替换为 "c3" 。因此压缩后的字符串变为 "a2bc3" 。

注意,本问题中,压缩时没有在单个字符后附加计数 '1' 。

给你一个字符串 s 和一个整数 k 。你需要从字符串 s 中删除最多 k 个字符,以使 s 的行程长度编码长度最小。

请你返回删除最多 k 个字符后,s 行程长度编码的最小长度 。

数据范围:

1 <= s.length <= 100
0 <= k <= s.length

思路:

这里推一波B站零神的[讲解]。
这里稍微讲一下代码的思路:

  • 状态表示:dp[i][j] 表示前 i 个字符,删除 j 个字符的行程编码长度。
  • 状态转移:
    • 当删除 a[i] 时,dp[i][j] == dp[i - 1][j - 1]
    • 当保留 a[i] 时,那么 a[i] 必定是前 i 个字符串的编码的最后一个字符,所以我们只需要枚举这个编码 a[i] 连续的个数。dp[i][j = min {dp[r][j - DC] + SC | r = 1...i}, DC表示s[r...i]中跟s[i]不同字符的数目,SC表示s[r...i]中跟s[i]相同字符的数目} 。我们的操作数需要减去与 s[r...i]中跟s[i]不同字符的数目。
代码:
const int N = 105;
int dp[N][N];
class Solution {
public:
    const int INF = 0x3f3f3f3f;
    int getLengthOfOptimalCompression(string s, int k) {
        memset(dp, INF, sizeof(dp));
        int n = s.size();
        dp[0][0] = 0;
        
        for (int i = 1; i <= n; ++i)
            for (int j = 0; j <= k && j <= i; ++j) {
                if (j) dp[i][j] = dp[i - 1][j - 1];
                int same = 0, diff = 0;
                
                for (int r = i; r > 0; --r) {
                    if (s[r - 1] == s[i - 1]) same++;
                    else diff++;
                    if (diff <= j) {
                        dp[i][j] = min(dp[i][j], dp[r - 1][j - diff] + ctoi(same));
                    }
                }
            }
        
        return dp[n][k];
        
    }
    
    int ctoi(int cnt) {
        if (cnt == 1) return 1;
        else if (cnt < 10) return 2;
        else if (cnt < 100) return 3;
        else return 4;
    }
};
FPGA实现DDR接口 verilog// DDR2控制器状态机// 初始化序列// 发出初始化命令endendendend// 自动预充电end// 其他状态...endcaseendend。 阅读详情

相关推荐

共享最近邻相似度

共享最近邻相似度 第三十四次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。本文作为基于图的聚类的第二部分,主要针对“共享最近邻相似度(Shared Nearest Neighbour)”以及使用该度量的“Jarvis-Patrick聚类”进行介绍。其他基于图的聚类算法的链接可以在这篇综述《基于图的聚类算法综述(基于图的聚类算法开篇)》的结尾找到。 S...

Ἥλιος 7606

leetcode 第360场周赛

leecode第360场周赛题解

昂昂累世士的博客 926

Kafka延迟队列实现方案全解析

$ \text{时间轮} = \text{环形数组} + \text{分层设计} $$需要补充代码实例或特定场景的优化方案可进一步细化,此大纲已覆盖核心技术路径。

lz989796的博客 817

LeetCode题解(1531):行程长度编码压缩字符串删去指定数量字符后的最短长度(Python)

题目:原题链接(困难) 标签:字符串、动态规划、动态规划-状态表格 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(S2×K)O(S^2×K)O(S2×K) O(S×K)O(S×K)O(S×K) 708ms (95.24%) Ans 2 (Python) Ans 3 (Python) 解法一(动态规划): class Solution: def getLengthOfOptimalCompression(self, s: str, k

长行 1401

股票交易接口TDX量化下单接口

对于需要同时操作多只股票的投资者而言,这一功能可以一次性处理多个交易指令,大大提高了交易的效率。通过回测,投资者可以发现策略中的不足之处,进而进行优化和调整,提高策略的可靠性。根据通达信提供的安装指南,下载相应的安装程序并进行安装。这包括设置交易账户的相关信息,如账户名、密码等,以及连接到正确的交易服务器。不同的情况可能会有不同的标准,有的可能要求账户使用达到一定的时长,有的可能对账户内的资产金额有最低要求。可以通过接口提供的监控功能或者第三方工具,实时查看交易状态、交易数据等信息,确保交易按照预期进行。

2401_88470113的博客 1289

电阻基础知识及应用电路仿真(Multisim)

本文围绕硬件工程师必备的电阻知识,从基础知识、实操、应用仿真三方面做系统讲解:基础上明确电阻的核心参数、分类、串并联计算及核心特性;实操中详解贴片/色环电阻的阻值读取、贴片封装换算,重点区分0Ω电阻(贴装跳线,实现功能选通/调试等)与磁珠(高频吸噪)的差异及选型;应用上介绍限流、分压、上拉/下拉、阻抗匹配、过压/过流保护五大典型电路的设计公式、选型原则和实操要点,同时给出电阻通用的选型、测量和布线设计规范,形成完整的电阻应用知识体系。

XU157303764的博客 2775

第219场LeetCode周赛

第219场LeetCode周赛 No.1 比赛中的配对次数 给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制: 如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。 如果当前队伍数为 奇数 ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生 (n - 1) / 2 + 1 支队伍进入下一轮。 返回在比赛中进行的配对次数,直到决出获胜队伍为止。 示例 1: 输入:n = 7

andyL_05的博客 602

【思博伦】史上最详细Spirent TestCenter测试仪使用教程精讲(一)!图解超赞超详细!!!

3. 在弹出的界面中,找到菜单栏中的“Connect/Create”,选择下拉框中的“Connect to Physical/Visual Chassis”,在弹出的对话框中输入思博伦测试仪的IP地址:192.168.6.244,点击“OK”;说明:目前我们只需要使用到Raw Stream Block,不需要用到Bound Stream Block。说明:如果要使用100G模式,由于硬件限制,必须连续3个面板端口同时配置为100G使用。打开安装包,并按照提示按照即可。

风云说通信 6478

Leetcode周赛

Leetcode周赛一、???? 第 281 场力扣周赛 一、???? 第 281 场力扣周赛 第 281 场力扣周赛 6012. 统计各位数字之和为偶数的整数个数 第一步:编写一个将数字千分位、百分位、十分位数字相加的函数 第二步:使用for循环遍历从1~num的数字,如果数字和为偶数,count++,最后return count. 注:c++中/是求商,%是求余,比如数985,商为98,余数为5,依次… class Solution { public: int countEven(int n

weixin_47156261的博客 1013

【OpenClaw从入门到精通】第73篇:30天OpenClaw实战挑战——从零搭建个人数字助理(Day15-21)万字超详细高阶实战版

经过前两周的基础部署与功能搭建,你已拥有可自动化干活的AI助理与数字员工团队,但距离“高阶精通”仍有差距。本文聚焦第三周(Day15-21)核心实战,围绕安全审计、语音能力接入、Token成本控制、Agent Loop优化、One-Liner指令五大核心模块,结合真实落地案例与踩坑经验,提供超详细实操指南。通过本文,你将掌握生产级安全加固方案、语音交互全流程配置、低成本高性价比使用策略、Agent自主闭环优化技巧,以及一句话搞定复杂任务的高效指令用法,同时完成中期复盘与最后九天冲刺规划

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 362

本地部署大模型:dgx-spark-ai项目硬件选型、部署与私有化AI构建指南

大语言模型(LLM)的本地部署是当前AI工程实践中的重要方向,其核心原理在于将模型权重与计算过程完全置于用户可控的硬件环境中。这项技术的核心价值在于实现了数据主权与隐私安全,避免了云端服务的延迟、持续订阅成本及数据外泄风险。从技术实现看,本地部署的关键在于硬件选型与软件环境适配,尤其是NVIDIA GPU的CUDA生态、显存容量与内存带宽的匹配。在应用场景上,本地化部署特别适合对数据敏感性要求高的领域,如企业内部代码助手、金融分析或医疗研究,能够支持私有化模型微调与定制化工作流构建。本文以dgx-spark

weixin_42531579的博客 503

LeetCode 318 周赛

T1是双指针模拟;T2是滑动窗口;T3是双指针+堆;T4是动态规划这次周赛是在周日上午,由于前一周拔了牙,当天周日早上去医院拆线,所以这场周赛没有参加。后来做了下虚拟比赛,只做出3题,T4还差点思维。

vcj1009784814的博客 802

C#上位机实战:Modbus RTU串口通信(CRC校验+超时重发完整实现)

在工业自动化上位机开发中,Modbus RTU是串口通信的事实标准协议,SerialPort是 .NET 平台操作串口的原生类,无需依赖第三方库即可实现基础通信。实际项目中,工控现场存在电磁干扰、串口丢包、设备响应延迟等问题,CRC 数据校验用于保证报文完整性,超时重发机制用于提升通信稳定性。本文从零封装一套可直接落地的 Modbus RTU 通信组件,包含完整的校验算法、超时控制、重发逻辑,并配套 WinForm 演示界面。本文基于 C# 原生SerialPort类,实现了一套生产可用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 387

【JAVA】LeetCode力扣 第199场周赛 题解+代码

目录一、5472. 重新排列字符串 Easy方法:暴力二、5473. 灯泡开关 IV Medium方法:从左往右,只要和flag不一致,就翻转三、5474. 好叶子节点对的数量 Medium方法:dfs四、5462. 压缩字符串 II Hard方法:不会做,晚上补 一、5472. 重新排列字符串 Easy 通过的用户数3797 尝试过的用户数3843 用户总通过次数3856 用户总提交次数4641 题目难度Easy 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串

子浩的博客 6013

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C/C++描述 LeetCode 周赛 第199场周赛(阿里云专场)

C/C++描述 LeetCode 周赛 第199场周赛(阿里云专场)   大家好,我叫亓官劼(qí guān jié ),在优快云中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在优快云中写博客,唯一博客更新的地址为:亓官劼的博客 本文原创为亓官劼,请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 5472. 重新排列字符串 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的

一起加油 2574

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

leetcode 第199场周赛第二题 灯泡开关 IV

leetcode 第199场周赛第二题 灯泡开关 IV 房间中有 n 个灯泡,编号从 0 到 n-1 ,自左向右排成一行。最开始的时候,所有的灯泡都是 关 着的。 请你设法使得灯泡的开关状态和 target 描述的状态一致,其中 target[i] 等于 1 第 i 个灯泡是开着的,等于 0 意味着第 i 个灯是关着的。 有一个开关可以用于翻转灯泡的状态,翻转操作定义如下: 选择当前配置下的任意一个灯泡(下标为 i ) 翻转下标从 i 到 n-1 的每个灯泡 翻转时,如果灯泡的状态为 0 就变为 1,为 1

小小鹿 534

Leetcode C++ 《第199场周赛》

做周赛的时候,注意力很集中哈哈,enjoy这个感觉,木有浮躁~ 做完之后看大佬写的代码,惊叹且学习了新思路和方法,很开森~ 1. 题目1 1.1 问题 https://leetcode-cn.com/contest/weekly-contest-199/problems/shuffle-string/ 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。 返回重新排列后的字符串。 输入:s = “co

快乐划水程序猿的专栏 408

LeetCode第199场周赛总结

题号 做出 未做 1528. 重新排列字符串 √ 1529. 灯泡开关 IV √ 1530. 好叶子节点对的数量 √ 1531. 压缩字符串 II √ 通过率:50%

weixin_39828926的博客 233

Java实现LeetCode第199场周赛(题号5472,5473,5474,5462)

一看就会,一做就废???? 5472. 重新排列字符串 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。 返回重新排列后的字符串。 示例 1: 输入:s = "codeleet", indices = [4,5,6,7,0,2,1,3] 输出:"leetcode" 解释:如图所示,"codeleet" 重新排列后变为 "leetcode" 。 示例 2: 输入:s = "abc",

日常发呆 9751

【Leetcode】第199场周赛

A.重新排列字符串 思路: 开个新数组或者map存储对应序号的字符,然后按序输出。 代码: class Solution { public: string restoreString(string s, vector<int>& indices) { map<int,char> q; for(int i=0;i<s.length();i++) q[indices[i]]=s[i]; stri

Halo_Bin的博客 233

LeetCode 第 199 场周赛(757/5231,前14.5%)

文章目录1. 比赛结果2. 题目1. LeetCode 5472. 重新排列字符串 easy2. LeetCode 5473. 灯泡开关 IV medium3. LeetCode 5474. 好叶子节点对的数量 medium4. LeetCode 5462. 压缩字符串 II hard 1. 比赛结果 第一题失误,点完提交就跑了,没想到。。第四题DP有些难,继续加油! 全国排名: 757 / 5231,14.5%;全球排名: 0 / 1,00.0% 2. 题目 1. LeetCode 5472. 重新排列

Michael是个半路程序员 2860

leetCode第199场周赛学习

199场周赛 1528. 重新排列字符串 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。 返回重新排列后的字符串。 输入:s = “codeleet”, indices = [4,5,6,7,0,2,1,3] 输出:“leetcode” 解释:如图所示,“codeleet” 重新排列后变为 “leetcode” 。 示例 2: 输入:s = “abc”, indices = [0,1,2] 输

可乐大牛的博客 222

leetcode 第199场周赛 [阿里云]

重新排列字符串 灯泡开关Ⅳ 好叶子节点对的数量 压缩字符串Ⅱ 3分 简单 4分 中等 5分 中等 8分 困难 √ √ √ 写的时候傻逼了,结束后立马过了 5472 重新排列字符串 签到题 复杂度 O(n) 执行用时 24ms 内存消耗 15.4MB class Solution { public: string restoreString(string s, vector<int>& indice..

qq_39898877的博客 277

LeetCode解题汇总目录

此篇为学习完《数据结构与算法之美》后,在LeetCode刷题的汇总目录,方便大家查找(Ctrl+Find),一起刷题,一起PK交流!如果本文对你有帮助,可以给我点赞加油! Updated on 2022.6.12刷题可以按照不同的专题进行,便于加强某个知识点的理解。另有《剑指Offer》面试题(更新完毕)、《程序员面试金典》面试题(更新完毕)、LintCode代码能力测试CAT。LeetCode MySQL 数据库解题目录点击访问 我的 LeetCode 主页我的 GitHub 主页注:本文超过字数限制,

Michael是个半路程序员 8万+

【LeetCode】周赛纪录(八)第199场周赛20200726 重新排列字符串 灯泡开关 IV 好叶子节点对的数量 压缩字符串 II

周赛第199场20200726 5472. 重新排列字符串 题目描述1 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。 返回重新排列后的字符串。 示例 1: 输入:s = "codeleet", indices = [4,5,6,7,0,2,1,3] 输出:"leetcode" 解释:如图所示,"codeleet" 重新排列后变为 "leetcode" 。 Solution1 class So

Evelyn的博客 233

leetcode - b 199场周赛(缺第四题)

1- 5472. 重新排列字符串 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。 返回重新排列后的字符串。 示例 1: 输入:s = “codeleet”, indices = [4,5,6,7,0,2,1,3] 输出:“leetcode” 解释:如图所示,“codeleet” 重新排列后变为 “leetcode” 。 示例 2: 输入:s = “abc”, indices = [0,1,2]

Leafy's draft about ML 279
上一篇: LeetCode第 31 场双周赛详解
下一篇: LeetCode第 200 场周赛详解
Corleo
博客等级 码龄11年 120粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值