[Algorithm][综合训练][打怪][判断是不是平衡二叉树][最大子矩阵]详细讲解

本文主要是介绍[Algorithm][综合训练][打怪][判断是不是平衡二叉树][最大子矩阵]详细讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1.打怪
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 2.判断是不是平衡二叉树
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 3.最大子矩阵
    • 1.题目链接
    • 2.算法原理详解 && 代码实现


1.打怪

1.题目链接

  • 打怪

2.算法原理详解 && 代码实现

  • 自己的版本:暴力模拟
    #include <iostream>
    using namespace std;int main()
    {int t = 0;cin >> t;int h, a, H, A;while(t--){cin >> h >> a >> H >> A;if(a >= H){cout << -1 << endl;continue;}int cnt = 0, tmpH = H;while(h > 0){if((tmpH -= a) <= 0){cnt++;tmpH = H;continue;}h -= A;}cout << cnt << endl;}return 0;
    }
    
  • 优化版本:数学
    • 遇到一只怪物,怪物能抗几次?
      • m = H / a + (H % a != 0 ? 1 : 0)
    • 杀死一只怪物的时候,玩家被攻击几次
      • n = m - 1
    • 杀死一只怪物的时候,玩家掉几点血
      • x = n * A
    • 玩家一共能杀死多少怪物
      • ret = h / x - (h % x == 0 ? 1 : 0)
    #include <iostream>
    using namespace std;int h, a, H, A;int Check()
    {if(a >= H){return -1;}int m = (H / a) + (H % a != 0 ? 1 : 0); // 怪物能抗⼏次int n = m - 1; // 玩家被攻击⼏次int x = n * A; // 杀死⼀只怪物的时候,玩家会掉多少⾎int ret = h / x - (h % x == 0 ? 1 : 0);return ret;
    }int main()
    {int t = 0;cin >> t;while(t--){cin >> h >> a >> H >> A;cout << Check() << endl;}return 0;
    }
    

2.判断是不是平衡二叉树

1.题目链接

  • 判断是不是平衡二叉树

2.算法原理详解 && 代码实现

  • 优化版本
    class Solution 
    {
    public:bool IsBalanced_Solution(TreeNode* pRoot) {return DFS(pRoot) != -1;}// 返回值不是-1的话,其余的返回值表示的是树高int DFS(TreeNode* root){if(root == nullptr){return 0;}int left = DFS(root->left);if(left == -1){return -1; // 剪枝}int right = DFS(root->right);if(right == -1){return -1;}return abs(left - right) <= 1 ? max(left, right) + 1 : -1;}
    };
    

3.最大子矩阵

1.题目链接

  • 最大子矩阵

2.算法原理详解 && 代码实现

  • 解法:二维前缀和

    • 初始化⼆维前缀和矩阵
    • 枚举所有的⼦矩阵,求出最⼤⼦矩阵
  • 如何枚举所有的子矩阵?

    for(0 ~ n - 1) -> x1for(0 ~ m - 1) -> y1for(x1 ~ mn - 1) -> x2for(y1 ~ m - 1) -> y2
    
  • 如何计算矩阵中所有元素的和? --> 二位前缀和 --> 动态规划

    • 初始化二维dp表
      请添加图片描述

    • 使用二维dp表
      请添加图片描述

    #include <iostream>
    #include <vector>
    using namespace std;int main()
    {int n = 0, x = 0;cin >> n;// 动态规划 --> 求二维前缀和数组vector<vector<int>> dp(n + 1, vector<int>(n + 1, 0));for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){cin >> x;dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + x;}}int ret = -0x3f3f3f3f;for(int x1 = 1; x1 <= n; x1++){for(int y1 = 1; y1 <= n; y1++){for(int x2 = x1; x2 <= n; x2++){for(int y2 = y1; y2 <= n; y2++){ret = max(ret, dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1]);}}}}cout << ret << endl;return 0;
    }
    

这篇关于[Algorithm][综合训练][打怪][判断是不是平衡二叉树][最大子矩阵]详细讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110875

相关文章

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二:

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

Springboot 中使用Sentinel的详细步骤

《Springboot中使用Sentinel的详细步骤》文章介绍了如何在SpringBoot中使用Sentinel进行限流和熔断降级,首先添加依赖,配置Sentinel控制台地址,定义受保护的资源,... 目录步骤 1: 添加 Sentinel 依赖步骤 2: 配置 Sentinel步骤 3: 定义受保护的

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

在idea中使用mysql数据库超详细教程

《在idea中使用mysql数据库超详细教程》:本文主要介绍如何在IntelliJIDEA中连接MySQL数据库,并使用控制台执行SQL语句,还详细讲解了如何使用MyBatisGenerator快... 目录一、连接mysql二、使用mysql三、快速生成实体、接口、sql文件总结一、连接mysql在ID

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选