力扣每日一题--2088. 统计农场中肥沃金字塔的数目

看到这道题有些人很容易放弃,其实这道题不是很难,主要是题目长,读的容易让人放弃,但是

只要抓住一些性质就可以解决该问题。

    本题中的定义放到图像里其实就是个金字塔,下层的那部分比上一层的那部分,长度加2,

并且该层那个长度区间内都是1才行。是个金字塔形状里都是1就行。

 我们暴力的解法是什么呢?,其实就是遍历整个数组,以每个数组下标为金子塔尖,往下去统计有多少个金字塔,那么这个的时间复杂度是1e8,会超时,所以我们得想别的方法去优化统计多少个金字塔这部分方面去想。那么我们再深入思考一下,我们每次遍历的时候,每次都要向下去统计金字塔,那在统计的时候,我们每次都要关注当前外层是否从上一层外层下来,统计好之后我们怎么想呢?目前已经知道我们的行数是确定的,那么其实只要他的下面的外层可以延伸到金字塔尖的话,我们就可以根据行数和外层可以延伸的长度那么我们就可以知道金字塔数量了,

求每个塔尖的话都是可以这样的,那么外层可以延伸的长度和行数我们怎么确定呢?以正金字塔为例子,一是预处理出来,但是这样复杂度还是比较高,那么我们是不是可以想一下从下往上遍历的话,我们是不是就可以固定金字塔的高度了,比如当前点是i,j,那可以从i + 2到i + 1,i + 1到i。那么高度我们已经确定好了,怎么去确定可以延伸的长度呢?

这个确实不好想,我们目前推出来的只知道每一次长度相差为2,只知道判断从左下角上来,

从右下角上来,但是不知道他中间那段能不能上来,现在就是要确定中间那段如何让他上来,

但是我们仔细想想的话,根据前面的推导,我们在向上推的话,我们是不是只能推导到金字塔尖,那么如果不是金子塔尖呢?我们该怎么去推导呢?其实到这里我们就已经知道了,这是一个动态规划问题,那么动态规划问题的本质是什么呢?找子问题,那么我们是不是可以想一下,最顶上的金子塔尖,是不是可以从下层的金字塔尖推上去,是可以的,我们只用知道左下角,下方,右下角上来就知道了,去个min就可以了,那么状态转移方程就是

f[i][j] = min(f[i + 1][j],min(f[i + 1][j + 1],f[i + 1][j - 1])) + 1;

class Solution {
public:int f[1100][1100];int countPyramids(vector<vector<int>>& grid) {memset(f,0,sizeof(f));int n = grid.size(),m = grid[0].size();//i + 1,j//i + 1,j - 1//i + 1,j + 1int ans = 0;for(int i = n - 1;i >= 0;i--){for(int j = 0;j < m;j++){if(grid[i][j] == 0) continue;if(j - 1 < 0 || j + 1 >= m || i + 1 >= n) continue;if(grid[i + 1][j] == 0 || grid[i + 1][j - 1] == 0 || grid[i + 1][j + 1] == 0) continue;f[i][j] = min(f[i + 1][j],min(f[i + 1][j + 1],f[i + 1][j - 1])) + 1;ans += f[i][j];}}//i - 1,j//i - 1,j - 1//i - 1,j + 1memset(f,0,sizeof(f));for(int i = 0;i < n;i++){for(int j = 0;j < m;j++){if(grid[i][j] == 0) continue;if(i - 1 < 0 || j + 1 >= m || j - 1 < 0) continue;if(grid[i - 1][j] == 0 || grid[i - 1][j - 1] == 0 || grid[i - 1][j + 1] == 0) continue;f[i][j] = min(f[i - 1][j],min(f[i - 1][j + 1],f[i - 1][j - 1])) + 1;ans += f[i][j];}}return ans;}
};

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

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

相关文章

What does `ResponseEntity` do?

ResponseEntity 作为 Spring MVC controller层 的 HTTP response&#xff0c;包含 status code, headers, body 这三部分。 正常场景 RestController Slf4j public class SearchController {AutowiredUserService userService;RequestMapping(value "/getAllStudents4&…

Androidmanifest文件加固和对抗

前言 恶意软件为了不让我们很容易反编译一个apk&#xff0c;会对androidmanifest文件进行魔改加固&#xff0c;本文探索androidmanifest加固的常见手法以及对抗方法。这里提供一个恶意样本的androidmanifest.xml文件&#xff0c;我们学完之后可以动手实践。 1、Androidmanife…

文心一言 vs. ChatGPT:哪个更胜一筹?

文心一言 vs. ChatGPT&#xff1a;从简洁美到深度思考的文本生成之旅 近年来&#xff0c;文本生成工具的崛起使得人们在表达和沟通方面拥有了更多的选择。在这个领域中&#xff0c;文心一言和ChatGPT作为两个备受瞩目的工具&#xff0c;各自以独特的优势展现在用户面前。本文将…

国际版WPS Office 18.6.1

【应用名称】&#xff1a;WPS Office 【适用平台】&#xff1a;#Android 【软件标签】&#xff1a;#WPS 【应用版本】&#xff1a;18.6.1 【应用大小】&#xff1a;160MB 【软件说明】&#xff1a;软件日常更新。WPS Office是使用人数最多的移动办公软件。独有手机阅读模式…

从零开始的神经网络

了解如何在没有框架帮助的情况下构建神经网络的基础知识&#xff0c;这些框架可能使其更易于使用 在 Python 中创建具有不同架构的复杂神经网络应该是任何机器学习工程师或数据科学家的标准做法。但是&#xff0c;真正了解神经网络的工作原理同样有价值。在本文中&#xff0c;…

代码随想录刷题笔记(DAY11)

今日总结&#xff1a;继续准备期末&#xff0c;今天的算法题目比较简单&#xff0c;晚上看看能不能再整理一篇前端的笔记。 Day 11 01. 有效的括号&#xff08;No. 20&#xff09; 题目链接 代码随想录题解 1.1 题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff…

【C++】__declspec含义

目录 一、__declspec(dllexport)如果这篇文章对你有所帮助&#xff0c;渴望获得你的一个点赞&#xff01; 一、__declspec(dllexport) __declspec(dllexport) 是 Microsoft Visual C 编译器提供的一个扩展&#xff0c;用于指示一个函数或变量在 DLL&#xff08;动态链接库&…

非常好用的个人工作学习记事本Obsidian

现在记事本有两大流派&#xff1a;Obsidian 和Notion&#xff0c;同时据说logseq也很不错 由于在FreeBSD下后两种都没有相关ports&#xff0c;所以优先尝试使用Obsidian Obsidian简介 Obsidian是基于Markdown文件的本地知识管理软件&#xff0c;并且开发者承诺Obsidian对于个…

2024年腾讯云服务器配置价格表(机型/磁盘/宽带/CPU)

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

Swoft - Bean

一、Bean 在 Swoft 中&#xff0c;一个 Bean 就是一个类的一个对象实例。 它(Bean)是通过容器来存放和管理整个生命周期的。 最直观的感受就是省去了频繁new的过程&#xff0c;节省了资源的开销。 二、Bean的使用 1、创建Bean 在【gateway/app/Http/Controller】下新建一个名为…

Vue + JS + tauri 开发一个简单的PC端桌面应用程序

Vue JS tauri 开发一个简单的PC端桌面应用程序 文章目录 Vue JS tauri 开发一个简单的PC端桌面应用程序1. 环境准备1.1 安装 Microsoft Visual Studio C 生成工具[^2]1.2 安装 Rust[^3] 2. 使用 vite 打包工具创建一个 vue 应用2.1 使用Vite创建前端Vue项目2.2 更改Vite打包…

jmeter--常用插件及服务器监控(14)

一.jmeter插件管理器 下载jmeter插件管理器&#xff1a;plugins-manager.jar 下载plugins-manager.jar并将其放入lib/ext目录&#xff0c;然后重启JMeter。 插件管理界面 打开选项->Plugins Manager&#xff08;界面见下图&#xff09;&#xff0c;“Installed Plugns”…

牛客周赛 Round 3 解题报告 | 珂学家 | 贪心思维场

前言 寒之不寒无水也&#xff0c;热之不热无火也。 整体评价 感觉比较简单&#xff0c;更加侧重于思维吧。和前几场的Round系列&#xff0c;风格不太一样。 A. 游游的7的倍数 因为连续7个数&#xff0c;比如有一个数是7的倍数 因此从个位数中着手添加&#xff0c;是最好的选…

了解Dubbo配置:优先级、重试和容错机制的秘密【五】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 了解Dubbo配置&#xff1a;优先级、重试和容错机制的秘密【五】 前言Dubbo高级配置概述不同配置覆盖关系重试与容错处理机制负载均衡机制 前言 Dubbo作为一款强大的分布式服务框架&#xff0c;其高级…

2024.1.8 关于 Redis 数据类型 Zset 集合命令、编码方式、应用场景

目录 引言 Zset 集合命令 ZINTERSTORE ZUNIONSTORE Zset 编码方式 Zset 应用场景 排行榜系统 引言 在 Redis 中集合间操作无非就是 交集、并集、差集 Set 类型与之相对应的操作命令为 sinter、sunion、sdiff 注意&#xff1a; 从 Redis 6.2 版本开始&#xff0c;Zset 命…

复选框QCheckBox和分组框QGroupBox

1. 复选框&#xff1a;QCheckBox 实例化 //实例化 // QCheckBox* checkBox new QCheckBox("是否同意该条款",this);QCheckBox* checkBox new QCheckBox(this);1.1 代码实现 1.1.1 复选框的基本函数 复选框选中状态的参数 Qt::Unchecked //未选中状态 Qt::Part…

我的NPI项目之设备系统启动(三) -- CDT的一个实例

上面说了这么多&#xff0c;这里就添加一个CDT的使用实例和简单的代码解析。 首先生成cdt_configure.xml配置文件&#xff0c;然后执行如下命令&#xff1a; python cdt_generator.py cdt_configure.xml CDT.bin; 就可以生成对应的CDT.bin文件。同时也会生成, 我们会利用ha…

NLP论文阅读记录 - 2021 | WOS 利用 ParsBERT 和预训练 mT5 进行波斯语抽象文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.前提三.本文方法A. 序列到序列 ParsBERTB、mT5 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Leveraging ParsBERT and Pretrained …

【EAI 006】ChatGPT for Robotics:将 ChatGPT 应用于机器人任务的提示词工程研究

论文标题&#xff1a;ChatGPT for Robotics: Design Principles and Model Abilities 论文作者&#xff1a;Sai Vemprala, Rogerio Bonatti, Arthur Bucker, Ashish Kapoor 作者单位&#xff1a;Scaled Foundations, Microsoft Autonomous Systems and Robotics Research 论文原…

统计学-R语言-3

文章目录 前言给直方图增加正态曲线的不恰当之处直方图与条形图的区别核密度图时间序列图洛伦茨曲线计算绘制洛伦茨曲线所需的各百分比数值绘制洛伦茨曲线 练习 前言 本篇文章是介绍对数据的部分图形可视化的图型展现。 给直方图增加正态曲线的不恰当之处 需要注意的是&#…