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。

转移为:

  1. 当 count == limit 时,换另一个数字开始计数 dfs(j-1, i, 1)
  2. 当 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)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/701638.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM应用-prompt提示:让大模型总结生成思维导图

第一步&#xff1a;大模型生成markdown思维导图格式 例如&#xff1a;kimi 总结pdf文档案例&#xff1a; 生成的markdown格式&#xff1a; # 知识图谱的构建及应用 ## 一、知识图谱的构建 ### 1. 数据采集 - 来源&#xff1a;结构化数据库、半结构化网页、非结构化文本 - 预处…

2024年小学生古诗文大会备考:吃透历年真题和知识点(持续)

根据往年的安排&#xff0c;2024年小学生古诗文大会预计这个月就将启动。该如何备考2024年小学生古诗文大会呢&#xff1f;根据往期的经验&#xff0c;只要吃透这些真题和背后的知识点&#xff0c;通过上海小学生古诗文大会的初选&#xff08;初赛&#xff09;一点问题都没有。…

LeetCode 126题:单词接龙 II

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

【源码】Spring Data JPA原理解析之Repository的自动注入(一)

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 5、Spring Data JPA自定…

单用户模式破解root密码

目录 一. 破解root密码 1. 查看操作系统版本 2.重启系统&#xff0c;进入grub菜单&#xff0c;选择要使用的内核&#xff0c;按e进入​编辑 3. 找到linux16那一行&#xff0c;把光标移动到最后&#xff0c;添加 init/bin/sh 然后ctrlx保存退出会自动进入系统 4. 进入系统后…

C++ 并发编程指南(11)原子操作 | 11.6、计算机内存结构

文章目录 一、计算机内存结构1、内存的基本组成2、内存的类型3、内存的结构层次4、CPU架构5、局部性原理6、总结 前言 在探讨计算机的运行效率和数据处理能力时&#xff0c;内存结构无疑是一个至关重要的部分。内存&#xff0c;作为计算机系统中的关键组件&#xff0c;承担着存…

详细分清Session,Cookie和Token之间的区别,以及JWT是什么东西

Cookie Cookie是一种小型的文本文件&#xff0c;由网站在用户访问时存储在其计算机或移动设备上&#xff0c;Cookie主要用于跟踪、识别和存储有关用户的信息。 简单来说Cookie就是用来存储某些后端发送给前端的数据&#xff0c;例如我们登陆后&#xff0c;后端会返回一个登录…

网站有存在哪些类型的漏洞,网站漏洞存在哪些危害,该怎么解决网站漏洞问题

在数字化日益发展的今天&#xff0c;随着互联网的普及和深入&#xff0c;网站安全已成为企业、组织乃至个人都必须高度重视的安全问题。而网站漏洞作为威胁网站安全的重要因素之一&#xff0c;其类型多种多样&#xff0c;不仅可能导致数据泄露、系统崩溃&#xff0c;还可能为黑…

CVPR2022人脸识别Partial FC论文及代码学习笔记

论文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2022/papers/An_Killing_Two_Birds_With_One_Stone_Efficient_and_Robust_Training_CVPR_2022_paper.pdf 代码链接&#xff1a;insightface/recognition/arcface_torch at master deepinsight/insightface G…

量化研究---A股赚钱日历,上证指数为例,提供源代码

今天把A股的全部数据导出做了一些赚钱日历分析&#xff0c;看那个月赚钱容易&#xff0c;那个月赚钱困难 导入需要的库 import pandas as pdimport matplotlib.pyplot as pltimport quantstats as qsfrom trader_tool.index_data import index_datafrom trader_tool import j…

BakedSDF: Meshing Neural SDFs for Real-Time View Synthesis 论文阅读

&#xff08;水一篇博客&#xff09; 项目主页 BakedSDF: Meshing Neural SDFs for Real-Time View Synthesis 作者介绍 是 Mildenhall 和 Barron 参与的工作&#xff08;都是谷歌的&#xff09;&#xff0c;同时一作是 Lipman 的学生&#xff0c;VolSDF 的一作。本文引用…

五分钟“手撕”时间复杂度与空间复杂度

目录 一、算法效率 什么是算法 如何衡量一个算法的好坏 算法效率 二、时间复杂度 时间复杂度的概念 大O的渐进表示法 推导大O阶方法 常见时间复杂度计算举例 三、空间复杂度 常见时间复杂度计算举例 一、算法效率 什么是算法 算法(Algorithm)&#xff1a;就是定…