Leetcode 第 129 场双周赛题解
Leetcode 第 129 场双周赛题解
- Leetcode 第 129 场双周赛题解
- 题目1:3127. 构造相同颜色的正方形
- 思路
- 代码
- 复杂度分析
- 题目2:3128. 直角三角形
- 思路
- 代码
- 复杂度分析
- 题目3:3129. 找出所有稳定的二进制数组 I
- 思路
- 代码
- 复杂度分析
- 题目4:3130. 找出所有稳定的二进制数组 II
- 思路
- 代码
- 复杂度分析
Leetcode 第 129 场双周赛题解
题目1:3127. 构造相同颜色的正方形
思路
枚举 + 计数。
枚举矩阵中的每个 2×2 子矩形。
对于每个子矩形,统计 B 和 W 的个数,如果其中一个字母的出现次数 ≥3,则返回 true。
如果 4 个子矩形都不满足要求,返回 false。
代码
/** @lc app=leetcode.cn id=3127 lang=cpp** [3127] 构造相同颜色的正方形*/// @lc code=start
class Solution
{
public:bool canMakeSquare(vector<vector<char>> &grid){// 判断以 (row, col) 为左上角的 2*2 的正方形是否满足要求auto check = [&](int row, int col) -> bool{int cntB = 0, cntW = 0;for (int i = row; i <= row + 1; i++)for (int j = col; j <= col + 1; j++){if (grid[i][j] == 'B')cntB++;elsecntW++;}return cntB >= 3 || cntW >= 3;};// 对于 3*3 的矩阵,只需要考虑 4 种情况return check(0, 0) || check(0, 1) || check(1, 0) || check(1, 1);}
};
// @lc code=end
复杂度分析
时间复杂度:O(1)。
空间复杂度:O(1)。
题目2:3128. 直角三角形
思路
套路:有三个顶点,枚举「中间」的直角顶点更容易计算。
设第 i 行有 rows[i] 个 1,第 j 列有 cols[j] 个 1。根据乘法原理,直角顶点为 (i,j) 的直角三角形有 (rows[i] - 1) * (cols[j] - 1) 个,加到答案中。
代码
/** @lc app=leetcode.cn id=3128 lang=cpp** [3128] 直角三角形*/// @lc code=start
class Solution
{
public:long long numberOfRightTriangles(vector<vector<int>> &grid){int m = grid.size(), n = m ? grid[0].size() : 0;// 每行 1 的个数vector<int> rows(m, 0);for (int i = 0; i < m; i++){int row = 0;for (int j = 0; j < n; j++)row += grid[i][j];rows[i] = row;}// 每列 1 的个数vector<int> cols(n, 0);for (int j = 0; j < n; j++){int col = 0;for (int i = 0; i < m; i++)col += grid[i][j];cols[j] = col;}long long ans = 0LL;for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)if (grid[i][j] == 1){// 直角顶点为 (i,j) 的直角三角形有 (rows[i] - 1) * (cols[j] - 1) 个ans += (rows[i] - 1) * (cols[j] - 1);}return ans;}
};
// @lc code=end
复杂度分析
时间复杂度:O(m*n),其中 m 和 n 分别是矩阵 grid 的行数和列数。
空间复杂度:O(m+n),其中 m 和 n 分别是矩阵 grid 的行数和列数。
题目3:3129. 找出所有稳定的二进制数组 I
思路
记忆化搜索。
dfs(i, j, count) 表示还剩 i 个 0,j 个 1,已经连用 count 个 i 对应的数字的组合数。
边界:dfs(0, 0, count) = 1。
转移为:
- 当 count == limit 时,换另一个数字开始计数 dfs(j-1, i, 1)
- 当 count < limit 时,为 dfs(i-1, j, count+1) + dfs(j-1, i, 1)
入口:dfs(zero, one, 0)。
代码
/** @lc app=leetcode.cn id=3129 lang=cpp** [3129] 找出所有稳定的二进制数组 I*/// @lc code=start
class Solution
{
private:const int MOD = 1e9 + 7;public:int numberOfStableArrays(int zero, int one, int limit){int mx = max(zero, one);int memo[mx + 1][mx + 1][limit + 1];memset(memo, -1, sizeof(memo));// 还剩 i 个 0,j 个 1,已经连续使用了 count 个 i 对应的数字function<int(int, int, int)> dfs = [&](int i, int j, int count) -> int{if (i < 0 || j < 0)return 0;if (i == 0 && j == 0)return 1;int &res = memo[i][j][count];if (res != -1)return res;if (count == limit){// 换另一个数字开始计数res = dfs(j - 1, i, 1) % MOD;}else{// 两种都可以res = (dfs(i - 1, j, count + 1) + dfs(j - 1, i, 1)) % MOD;}return res;};return dfs(zero, one, 0);}
};
// @lc code=end
复杂度分析
时间复杂度:O(zero*one*limit)。
空间复杂度:O(mx2*limit),其中 mx = max(zero, one)。
题目4:3130. 找出所有稳定的二进制数组 II
思路
题解:两种方法:动态规划 / 组合数学(Python/Java/C++/Go)
定义 dfs(i, j, k, limit) 为用 i 个 0,j 个 1 构造稳定数组的方案数,其中第 i+j 个位置要填 k,其中 k 为 0 或 1。

边界:

入口:dfs(zero, one, 0, limit) + dfs(zero, one, 1, limit)。
代码
/** @lc app=leetcode.cn id=3130 lang=cpp** [3130] 找出所有稳定的二进制数组 II*/// @lc code=start
class Solution
{
private:const int MOD = 1e9 + 7;public:int numberOfStableArrays(int zero, int one, int limit){int memo[zero + 1][one + 1][2];memset(memo, -1, sizeof(memo));// 用 i 个 0,j 个 1 构造稳定数组的方案数,其中第 i+j 个位置要填 kfunction<int(int, int, int, int)> dfs = [&](int i, int j, int k, int limit) -> int{if (i == 0){ // 递归边界return k == 1 && j <= limit;}if (j == 0){ // 递归边界return k == 0 && i <= limit;}int &res = memo[i][j][k];if (res != -1)return res;if (k == 0){res = ((long long)dfs(i - 1, j, 0, limit) + dfs(i - 1, j, 1, limit) +(i > limit ? MOD - dfs(i - limit - 1, j, 1, limit) : 0)) %MOD;}else{res = ((long long)dfs(i, j - 1, 0, limit) + dfs(i, j - 1, 1, limit) +(j > limit ? MOD - dfs(i, j - limit - 1, 0, limit) : 0)) %MOD;}return res;};return (dfs(zero, one, 0, limit) + dfs(zero, one, 1, limit)) % MOD;}
};
// @lc code=end
复杂度分析
时间复杂度:O(zero*one)。
空间复杂度:O(zero*one)。
相关文章:
Leetcode 第 129 场双周赛题解
Leetcode 第 129 场双周赛题解 Leetcode 第 129 场双周赛题解题目1:3127. 构造相同颜色的正方形思路代码复杂度分析 题目2:3128. 直角三角形思路代码复杂度分析 题目3:3129. 找出所有稳定的二进制数组 I思路代码复杂度分析 题目4:…...
队列的讲解
队列的概念 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 一端进另一端出 也就是可以做到,先…...
算法学习笔记(LCA)
L C A LCA LCA:树上两个点的最近公共祖先。(两个节点所有公共祖先中,深度最大的公共祖先) L C A LCA LCA的性质: 在所有公共祖先中, L C A ( x , y ) LCA(x,y) LCA(x,y)到 x x x和 y y y的距离都最短。 x …...
记一次苹果appstore提审拒审问题1.2
有关苹果appstore审核1.2问题的处理方案 2023.8.6苹果回复 Bug Fix Submissions The issues weve identified below are eligible to be resolved on your next update. If this submission includes bug fixes and youd like to have it approved at this time, reply to thi…...
在做题中学习(59):除自身以为数组的乘积
238. 除自身以外数组的乘积 - 力扣(LeetCode) 解法:前缀积和后缀积 思路:answer中的每一个元素都是除自己以外所有元素的和。那就处理一个前缀积数组和后缀积数组。 而前缀积(f[i])是:[0,i-1]所有元素的乘积 后缀…...
centos 把nginx更新到最新版本
yum install epel-release # 添加 EPEL 软件仓库,这是 Nginx 官方软件仓库的依赖项 yum install yum-utils # yum-utils 包含了 yum-config-manager 工具,它可以让您轻松地启用、禁用或配置 yum 软件仓库 vi /etc/yum.repos.d/nginx.repo # 增加以下内容…...
01.认识HTML及常用标签
目录 URL(统一资源定位系统) HTML(超文本标记语言) 1)html标签 2)head标签 3)title标签 4)body标签 标签的分类 DTD文档声明 基础标签 1)H系列标签 2)…...
从零开始:C++ String类的模拟实现
文章目录 引言1.类的基本结构2.构造函数和析构函数3.基本成员函数总结 引言 在C编程中,字符串操作是非常常见且重要的任务。标准库中的std::string类提供了丰富且强大的功能,使得字符串处理变得相对简单。然而,对于学习C的开发者来说&#x…...
银河麒麟服务器操作系统V10-SP2部署gitlab服务
安装依赖 yum -y install python3-policycoreutils openssh-server openssh-clients postfix cronie curl下载gitlab-ce-15.4.2-ce.0.el8.x86_64.rpm安装包。 wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/8/gitlab-ce-15.4.2-ce.0…...
【计算机毕业设计】基于SSM+Vue的线上旅行信息管理系统【源码+lw+部署文档+讲解】
目录 1 绪论 1.1 研究背景 1.2 设计原则 1.3 论文组织结构 2 系统关键技术 2.1JSP技术 2.2 JAVA技术 2.3 B/S结构 2.4 MYSQL数据库 3 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 操作可行性 3.1.3 经济可行性 3.1.4 法律可行性 3.2系统功能分析 3.2.1管理员功能分析 3.2.…...
链表CPP简单示例
链表创建 链表打印全部内容 获取链表长度 链表根据指定位置添加元素 链表根据指定位置删除元素 #include <iostream> using namespace std;// 1、创建结构体// typedef 经常在结构中使用 typedef 别名 typedef struct node {int date;struct node* next; // 必须要自己…...
智能EDM邮件群发工具哪个好?
企业之间的竞争日益激烈,如何高效、精准地触达目标客户,成为每个市场战略家必须面对的挑战。在此背景下,云衔科技凭借其前沿的AI技术和深厚的行业洞察,匠心推出了全方位一站式智能EDM邮件营销服务平台,重新定义了邮件营…...
低代码与AI技术发展:开启数字化新时代
随着数字化转型的深入推进,低代码和AI技术逐渐成为各行各业关注的焦点。这两种技术的发展不仅改变了传统开发模式,还为企业创新和产业升级提供了新契机。本文将探讨这两种技术在实际应用中的相互促进作用,以及它们为我国经济社会发展带来的机…...
风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码)
风电功率预测 风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码)完整代码风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码) 基于遗传算法优化BP神经网络是一种常见的方法,用于改进BP神经网络在风电功率预测中的性…...
uni-segmented-control插件使用
dcloud插件市场 前端/uniapp 1.HBuildX打开目标项目 2.进入dcloud插件市场下载目标插件 3.看到如下提示(已经可以在目标项目中使用插件啦) 4.项目正式使用...
被动防护不如主动出击
自网络的诞生以来,攻击威胁事件不断涌现,网络攻防对抗已然成为信息时代背景下的一场无硝烟的战争。然而,传统的网络防御技术,如防火墙和入侵检测技术,往往局限于一种被动的敌暗我明的防御模式,面对攻击者无…...
ollama离线部署llama3(window系统)
首先介绍下ollama是什么?Ollama是一个开源的大型语言模型服务工具,旨在为用户提供本地化的运行环境,满足个性化的需求。具体来说,Ollama是一个功能强大的开源框架,可以简化在Docker容器中部署和管理大型语言模型&a…...
基于Django实现的(bert)深度学习文本相似度检测系统设计
基于Django实现的(bert)深度学习文本相似度检测系统设计 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 登录页面 注册页面:用户账号,密码…...
数据中心网络随想-电路交换
数据中心网络扩容并不容易,涉及设备上架,切换等又硬又大的动作,期间对所有应用都会产生影响,所以理论上 “加钱加硬件” 这种看起来很简单的事实际上真不如 “写一个随时部署升级的端到端拥塞控制算法” 更容易实施。 傍晚绕小区…...
并行执行线程资源管理方式——《OceanBase 并行执行》系列 3
在某些特定场景下,由于需要等待线程资源,并行查询会遇到排队等待的情况。本篇博客将介绍如何管理并行执行线程资源,以解决这种问题。 《OceanBase并行执行》系列的内容分为七篇博客,本篇是其中的第三篇。 一并行执行概念二如何手…...
Stateflow实战:构建LKA系统状态机的模块化建模与数据管理
1. 从零理解LKA系统与Stateflow建模 第一次接触车道保持辅助系统(LKA)时,我盯着那个能在高速上自动修正方向的方向盘看了半天。这玩意儿到底怎么判断什么时候该介入?后来才知道,核心就是藏在控制器里的状态机逻辑。Sta…...
避坑指南:为什么你的mqtt.fx连不上OneNET?Token生成与参数配置的3个关键细节
避坑指南:为什么你的mqtt.fx连不上OneNET?Token生成与参数配置的3个关键细节 当你深夜调试MQTT设备,反复检查代码却依然看到刺眼的"离线"状态时,那种挫败感我深有体会。OneNET作为国内主流物联网平台,其MQTT…...
DeepSeek SSO权限同步失效深度复盘(附完整日志追踪链路图)
更多请点击: https://intelliparadigm.com 第一章:DeepSeek SSO权限同步失效深度复盘(附完整日志追踪链路图) 问题现象与影响范围 2024年10月17日 02:48 UTC,DeepSeek内部SSO系统(基于Keycloak 22.0.5&am…...
LabVIEW虚拟仪表开发:从图形化编程到工业测控系统实战
1. 虚拟仪表:从概念到实践的革新 作为一名在工业自动化领域摸爬滚打了十多年的硬件工程师,我经历过从纯硬件调试到软硬件结合的漫长过程。早期,面对一个复杂的测试系统,我们往往需要堆满一桌子的真实仪器——示波器、信号发生器、…...
从概率图到优化问题:信息矩阵、Hessian矩阵与协方差矩阵的内在统一
1. 概率图模型中的信息矩阵与协方差矩阵 我第一次接触信息矩阵是在做视觉SLAM项目时,当时被一堆矩阵运算绕得头晕。后来才发现,理解它们的关系就像拼乐高——每个零件都有明确的位置和作用。让我们从一个简单的因子图例子开始,看看这些矩阵如…...
测试TVS:SP0503BAHTG
简 介: 本文测试了SP0503BAHTG三通道TVS二极管阵列的特性。通过设计测试电路板,测量了该器件对1kHz正弦波的限幅效果,测得反向导通电压约-0.8V,顶部饱和电压6.3V。在1MHz高频测试中观察到快速响应特性,通过矩形波上升沿…...
RK3576嵌入式平台Weston配置实战:从显示校准到性能调优
1. 项目概述:为什么Weston配置值得深挖?如果你正在基于RK3576这类高性能嵌入式平台进行产品开发,尤其是涉及图形化人机交互界面的项目,那么你大概率已经接触或正在使用Wayland/Weston这套显示协议栈。RK3576作为一款集成了强大GPU…...
Zynq UltraScale+ MPSoC SoM选型与开发实战:从异构计算到嵌入式系统设计
1. 项目概述:为什么选择Zynq UltraScale MPSoC SoM? 在嵌入式系统开发,尤其是需要高性能计算、实时处理与灵活硬件加速的领域,选型往往是决定项目成败的第一步。过去几年,我经手过不少项目,从简单的微控制器…...
别再折腾了!Windows 11下TeX Live 2024 + VS Code配置LaTeX环境保姆级教程
别再折腾了!Windows 11下TeX Live 2024 VS Code配置LaTeX环境保姆级教程 对于科研人员和学术写作者来说,LaTeX始终是专业排版的不二之选。但传统LaTeX编辑器如TeXstudio虽然功能全面,却难以融入现代开发者的工作流。本文将带你用VS Code搭建…...
别再只用默认配置了!GaussDB密码安全策略的这8个参数,DBA必须知道怎么调
GaussDB密码安全策略深度实战:8个关键参数配置指南 在数据库安全管理中,密码策略往往是最容易被忽视却又最常被攻击利用的薄弱环节。许多DBA习惯性地沿用数据库默认配置,殊不知这些默认值可能无法满足企业实际安全需求。GaussDB作为企业级分布…...
