LeetCode - 129双周赛

目录

一,3127. 构造相同颜色的正方形

二,3128. 直角三角形

三,3129. 找出所有稳定的二进制数组 I

​编辑

四,3130. 找出所有稳定的二进制数组 II


一,3127. 构造相同颜色的正方形

本题就是问在一个3x3的正方形中是否存在一个2x2的正方形,其中存在大于等于3个白色或黑色的格子,如果有,返回true,没有,返回false。

代码如下: 

class Solution {public boolean canMakeSquare(char[][] grid) {return isValid(grid,0,0) || isValid(grid,0,1) || isValid(grid,1,0) || isValid(grid,1,1);}boolean isValid(char[][] grid, int i, int j){int cnt = 0;if(grid[i][j]=='W')cnt++;if(grid[i][j+1]=='W')cnt++;if(grid[i+1][j]=='W')cnt++;if(grid[i+1][j+1]=='W')cnt++;return cnt>=3 || cnt<=1;}
}

二,3128. 直角三角形

本题求直角三角形的个数,注意这题直角三角形的定义:只要A与B在同一行,且B与C在同一列,它就是一个直角三角形。

思路:需要枚举B所在的位置,计算出B所在行和B所在列中1的个数(row,col),然后相乘,再把其加入到答案中,注意这里B不能算在行和列中,所以是(row-1)*(col-1)。又因为每次都要使用行列中1的个数,所以可以提前使用数组预处理一下。

代码如下:

class Solution {public long numberOfRightTriangles(int[][] grid) {int n = grid.length;int m = grid[0].length;int[] row = new int[n];//每一行有几个1int[] col = new int[m];//每一列有几个1//预处理出每行每列1的个数for(int i=0; i<n; i++){for(int j=0; j<m; j++){row[i] += grid[i][j];col[j] += grid[i][j];}}long ans = 0;//枚举B的位置for(int i=0; i<n; i++){for(int j=0; j<m; j++){if(grid[i][j] == 1){ans += (row[i]-1)*(col[j]-1);}}}return ans;}
}

三,3129. 找出所有稳定的二进制数组 I

本题直接想到的做法是dfs枚举选哪个,枚举每一个位置选择的是0还是1,题目还要求连续的数不能超过limit,并且如果需要知道是否是连续的,还需要知道前一个数选的是0/1。

定义dfs(z,o,pre,cnt):剩余z个0,o个1,前一个数为pre,且同样的数连续出现了cnt次的合法方案数。

  • 当z>0时,当前数可以选0,它可以由 dfs(z-1,o,0,0==pre?cnt+1:limit) 转移过来
  • 当o>0时,当前数可以选1,它可以由 dfs(z,o-1,1,1==pre?cnt+1:limit) 转移过来
  • 终止条件:cnt==limit,return 0;o+z==0 即它是一个合法数,return 1

注:该方法如果使用哈希记忆化会超时,只能使用memo[][][][]来记忆化

代码如下:

class Solution {int limit;int MOD = (int)1e9+7;int[][][][] memo;public int numberOfStableArrays(int zero, int one, int limit) {this.limit = limit;memo = new int[zero+1][one+1][3][limit+1];for(int i=0; i<zero+1; i++){for(int j=0; j<one+1; j++){for(int k=0; k<3; k++){Arrays.fill(memo[i][j][k],-1);}}}return dfs(0, 2, zero, one);}int dfs(int cnt, int pre, int z, int o){if(cnt == limit) return 0;if(o+z==0){return 1;} if(memo[z][o][pre][cnt]!=-1) return memo[z][o][pre][cnt];int res = 0;if(z > 0)res = (res+dfs(pre==0?cnt+1:0, 0, z-1, o))%MOD;if(o > 0)res = (res + dfs(pre==1?cnt+1:0, 1, z, o-1))%MOD;memo[z][o][pre][cnt] = res%MOD;return res%MOD;}
}

四,3130. 找出所有稳定的二进制数组 II

本题和上一题一样,但是数据范围变大了,所以上述的方法不能在此使用,会超时。

重新定义一个dfs(i,j,k):i个0,j个1,且第i+j个数为k的合法方案数

  • 当 k = 0 时,我们要求的就变成了,i-1个0,j个1,且第i-1+j个数为0/1的合法方案数,即 dfs(i,j,0) = dfs(i-1,j,0) + dfs(i-1,j,1),但是dfs(i-1,j,0)中包含了最后连续limit个位置填0的方案,如果在这个方案末尾在加一个0,就有连续limit+1个0,这对于dfs(i,j,0)是不合法的,所以要减去 dfs(i-limit-1,j,1),即 dfs(i,j,0) = dfs(i-1,j,0) + dfs(i-1,j,1) - dfs(i-limit-1,j,1)
  • 当 k = 1 时,同理:dfs(i,j,1) = dfs(i,j-1,0) + dfs(i,j-1,1) - dfs(i,j-limit-1,0)
     

代码如下:

class Solution {int limit;int MOD = (int)1e9+7;int[][][] memo;public int numberOfStableArrays(int zero, int one, int limit) {this.limit = limit;memo = new int[zero+1][one+1][2];for(int i=0; i<zero+1; i++){for(int j=0; j<one+1; j++){Arrays.fill(memo[i][j],-1);}}return (dfs(zero, one, 0)+dfs(zero, one, 1))%MOD;}int dfs(int z, int o, int k){if(z == 0)return k==1 && limit>=o ? 1 : 0;if(o == 0)return k==0 && limit>=z ? 1 : 0;if(memo[z][o][k]!=-1) return memo[z][o][k];if(k == 0)memo[z][o][k] = (int)(((long)dfs(z-1, o, 1) + dfs(z-1, o, 0) + (z>limit ? MOD-dfs(z-limit-1, o, 1) : 0))%MOD);elsememo[z][o][k] = (int)(((long)dfs(z, o-1, 1) + dfs(z, o-1, 0) + (o>limit ? MOD-dfs(z, o-limit-1, 0) : 0))%MOD);return memo[z][o][k];}
}

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

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

相关文章

2024.4.25 LoadRunner 测试工具详解 —— Controller Analysis

目录 Controller 的使用 创建场景 Controller 快捷方式创建场景 VUG 针对写好脚本创建场景 场景设计 设计初始化 设计启动机制 设计性能测试脚本的执行时间 设计虚拟用户退出机制 场景运行 添加监控指标至图标格区域 Analysis 的使用 汇总报告 测试报表 吞吐量图 …

仿9377登录注册页面源码分享

LOGO在image里面修改,名字这些有记事本打开修改 仿9377登录注册页面源码分享

《HelloGitHub》第 97 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

【Spark】读取本地文件

最近有一个需求&#xff0c;spark任务读取本地csv文件&#xff0c;拼接成rk之后再去hbase取值进行后续处理。搞了好久都没能解决&#xff0c;记录一下解决思路如下&#xff1a; 1、写入临时文件 spark可以读取本地文件&#xff0c;但打成jar包之后不会自动读取jar包中的文件&…

《Python语言科研绘图与学术图表绘制从入门到精通》解锁Python语言绘图魅力,让数据可视化成为你的科研利器!

本书特点 1.零基础高效入门&#xff1a;通过软件操作、实战案例及图文、代码结合的方式&#xff0c;实现从入门到精通的快速学习。 2.掌握多元科研绘图&#xff1a;涵盖科研绘图基础、各类图形绘制技巧&#xff0c;包括变量、极坐标、2D、3D及地理信息可视化等。 3.实用与艺术…

学习 Rust 第 22 天:mini_grep 第 2 部分

书接上文&#xff0c;在本文中&#xff0c;我们学习了如何通过将 Rust 程序的逻辑移至单独的库箱中并采用测试驱动开发 (TDD) 实践来重构 Rust 程序。通过在实现功能之前编写测试&#xff0c;我们确保了代码的可靠性。我们涵盖了基本的 Rust 概念&#xff0c;例如错误处理、环境…

Coursera: An Introduction to American Law 学习笔记 Week 06: Civil Procedure (完结)

An Introduction to American Law Course Certificate Course Introduction 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors Week 06: Civil Pro…

安卓手机APP开发__媒体开发部分__高动态范围的视频播放

安卓手机APP开发__媒体开发部分__高动态范围的视频播放 目录 高动态范围的概述 设备的前提条件 检查高动态范围的播放的支持 在你的APP中设置高动态范围的播放 使用SurfaceView来设置MediaCodec 高动态范围的概述 高动态范围提供了一个宽的范围的颜色和最亮的白色与最暗…

Python使用设计模式中的建筑模式将数据写入Excel且满足条件内容标红

对于这个任务&#xff0c;适合使用"Builder"设计模式。Builder模式的主要目的是将对象的构建与其表示分离&#xff0c;以便相同的构建过程可以创建不同的表示。在这个情况下&#xff0c;我们需要一个构建器来逐行构建Excel表格&#xff0c;并根据给定的数据添加相应的…

【HTML】

1.html 语义化 提高可读性&#xff1a;对于开发者来说&#xff0c;语义化的HTML代码更容易阅读和理解。因为每个标签都有其特定的含义和用途&#xff0c;所以看到标签就能大致了解该部分内容的结构和作用。有利于搜索引擎优化&#xff08;SEO&#xff09;&#xff1a;对于搜索…

GoF之工厂模式

GoF之工厂模式 文章目录 GoF之工厂模式每博一文案1. 简单说明“23种设计模式”1.2 介绍工厂模式的三种形态1.3 简单工厂模式&#xff08;静态工厂模式&#xff09;1.3.1 简单工厂模式的优缺点: 1.4 工厂方法模式1.4.1 工厂方法模式的优缺点: 1.5 抽象工厂模式1.6 抽象工厂模式的…

Apache Seata基于改良版雪花算法的分布式UUID生成器分析2

title: 关于新版雪花算法的答疑 author: selfishlover keywords: [Seata, snowflake, UUID, page split] date: 2021/06/21 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 关于新版雪花算法的答疑 在上一篇关于新版雪花算法的解析中…

C++初阶学习第四弹——类与对象(中)——刨析类与对象的核心点

类与对象&#xff08;上&#xff09;&#xff1a;C初阶学习第三弹——类与对象&#xff08;上&#xff09;——初始类与对象-CSDN博客 前言&#xff1a; 在前面文章中&#xff0c;我们已经讲了类与对象的思想和类与对象的一些基本操作&#xff0c;接下来这篇文章我们将讲解以下…

探索Jellyfin:支持Android的自由开源的媒体服务器平台

探索Jellyfin&#xff1a;支持Android的自由开源的媒体服务器平台 I. 简介 A. 什么是Jellyfin&#xff1f; Jellyfin是一个自由开源的媒体服务器平台&#xff0c;旨在让用户能够自主管理和流式传输他们的媒体内容。与许多闭源的商业媒体服务器解决方案不同&#xff0c;Jelly…

Matlab各个版本介绍、区别分析及推荐

MATLAB&#xff0c;由美国MathWorks公司出品&#xff0c;是一款广泛应用的商业数学软件。自其诞生之初&#xff0c;MATLAB便以其强大的矩阵计算能力、灵活的编程环境以及广泛的应用领域&#xff0c;赢得了全球科研工作者和工程师的青睐。本文将详细介绍MATLAB的各个版本&#x…

ubuntu neo4j 下载与配置(一)

neo4j 官方下载页面 https://neo4j.com/deployment-center/#community 进入页面之后&#xff0c;往下滑 咱们在下载neo4j时&#xff0c;官方可能要咱们填写一下个人信息&#xff0c;比如&#xff1a;姓名组织结构邮箱等&#xff1a; 咱们可以观察一下&#xff0c;ne4j的下载链…

uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之编写语音播放安卓插件

前言 如果你不会编写安卓插件,你可以先看看我之前零基础的文章(uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之零基础编写安卓插件), 我们使用android.speech.tts.TextToSpeech进行编写语言播放插件 开始 uniapp <template><view style=&q…

烟雾识别图像处理方法详解---豌豆云

本文详细介绍了烟雾识别图像处理方法的原理、流程和应用场景&#xff0c;帮助读者理解并掌握这一技术&#xff0c;为实际应用提供指导。 随着科技的不断发展&#xff0c;图像处理技术在各个领域得到了广泛应用。 其中&#xff0c;烟雾识别图像处理方法作为一种重要的技术手段…

如何下载钉钉群直播回放:完整步骤解析

在当今快节奏的商业和教育环境中&#xff0c;钉钉群直播已经成为了沟通和学习的重要工具。直播结束后&#xff0c;很多观众都希望回顾内容&#xff0c;但却不知如何开始。如果你错过了实时直播&#xff0c;或者只是想再次观看精彩的演讲和讨论&#xff0c;那么下载钉钉群直播回…

基于ESP32—CAM物联网WIFI小车

一.功能概述 摄像头的画面可以实时的传输到&#xff0c;点灯科技APP的手机端&#xff0c;这样可以实时查看周围环境的状况&#xff0c;灯光不足&#xff0c;画面不清晰时可以打开灯光照明。手机端有左转、右转、前进、后退、停止的按钮。可以根据自己需要&#xff0c;来控制小车…