LeetCode --- 410周赛

news2024/11/16 11:37:08

题目列表

3248. 矩阵中的蛇

3249. 统计好节点的数目

3250. 单调数组对的数目 I

3251. 单调数组对的数目 II

一、矩阵中的蛇

只要按照题目要求模拟即可,代码如下

class Solution {
public:
    int finalPositionOfSnake(int n, vector<string>& commands) {
        int i = 0, j = 0;
        for(auto s:commands){
            switch(s[0])
            {
                case 'U': i--; break; // switch 语法:记得加break,不然后面的case语句也会被执行
                case 'D': i++; break;
                case 'R': j++; break;
                case 'L': j--; break;
            }
        }
        return i * n + j;
    }
};

 二、统计好结点的数目

这题考多叉树的遍历,主要看对递归的理解。计算树中满足其子树结点个数相同的结点个数,本质还是求结点个数,只不过多了一些限制条件,只要在求结点个数的dfs代码中进行修改即可,代码如下

class Solution {
public:
    int countGoodNodes(vector<vector<int>>& edges) {
        int n = edges.size() + 1;
        // 建树
        vector<vector<int>> g(n);
        for(auto e:edges){
            g[e[0]].push_back(e[1]);
            g[e[1]].push_back(e[0]);
        }
        int ans = 0;
        // 下面的 dfs函数 抛开 flag 相关的语句,就是一个求树的结点个数的代码
        function<int(int,int)>dfs = [&](int x,int fa)->int{
            bool flag = true;
            int pre = -1;
            int res = 1;
            for(int y:g[x]){
                if(y != fa){
                    int sz = dfs(y, x);
                    res += sz;
                    if(pre == -1) pre = sz;
                    else if(flag) flag &= (pre == sz);
                }
            }
            ans += flag;
            return res;
        };
        dfs(0, -1);
        return ans;
    }
};

三、单调数组对的数目 I & II

这种算合法方案数的题目,一般都是用动态规划解题 ( 最重要的一点是去尝试定义状态,当然做多了题目会有感觉,具体如何定义状态还要结合题目具体问题具体分析 ) 这题的状态定义如下:

  • 状态定义:f[i][j] 表示 第 i 个数为 j 时,有多少个合法的方案数(单调数组对)
  • 状态转移方程:f[i][j] = sum(f[i-1][k]),其中 k <= min(j, nums[i-1]) && nums[i] - j <= nums[i-1] - k ,等价于 k <= min(j, nums[i-1], j + nums[i-1] - nums[i])
    表示第 i 个数填 j 时的合法方案由第 i - 1 个数填 k 时的合法方案数之和,其中 k 需要满足题目的要求
  • 状态初始化:当 i = 0 时,可以填任何数,都算作一种合法的方案,即 f[0][j] = 1

代码如下

class Solution {
    const int MOD = 1e9 + 7;
public:
    int countOfPairs(vector<int>& nums) {
        int n = nums.size(), m = ranges::max(nums);
        vector<vector<int>> f(n, vector<int>(m + 1, 1));
        // f[i][j] 表示 第 i 个数填 j 时,所有可能的方案数
        // f[0][j] 第 0 个数 可以任意取,都算作一个合法方案,初始化为 1
        // f[i][j] = sum(f[i-1][k]) 
        // 满足 k <= min(j, nums[i-1]) && nums[i] - j <= nums[i-1] - k
        // 等价于 k <= min(j, nums[i-1], j + nums[i-1] - nums[i])
        for(int i = 1; i < n; i++){
            for(int j = 0; j <= nums[i]; j++){
                int res = 0;
                for(int k = 0; k <= min({j, nums[i-1],j + nums[i-1] - nums[i]}); k++){
                    res = (res + f[i-1][k])%MOD;
                }
                f[i][j] = res;
            }
        }
        int ans = 0;
        for(int i = 0; i <= nums.back(); i++)
            ans = (ans + f[n-1][i])%MOD;
        return ans;
    }
};

如何优化?

这里其实显而易见,我们在计算 f[i][j] 时,最内层对 k 的循环遍历,本质就是在求前缀和,我们可以提前预处理得到,这样就能在O(1) 的时间内计算出 f[i][j],代码如下

class Solution {
    const int MOD = 1e9 + 7;
public:
    int countOfPairs(vector<int>& nums) {
        int n = nums.size(), m = ranges::max(nums);
        vector<vector<int>> f(n, vector<int>(m + 1, 1));
        // f[i][j] 表示 第 i 个数为 j 时,所有可能的方案数
        // f[0][j] 第 0 个数 可以任意取,都算作一个合法方案,初始化为 1
        // f[i][j] = sum(f[i-1][k]) 
        // 满足 k <= min(j, nums[i-1]) & nums[i] - j <= nums[i-1] - k
        // 等价于 k <= min(j, nums[i-1], j + nums[i-1] - nums[i])
        for(int i = 1; i < n; i++){
            // 预处理前缀和
            int pre[nums[i-1]+1]; pre[0] = f[i-1][0];
            for(int j = 1; j <= nums[i-1]; j++){
                pre[j] = (pre[j-1] + f[i-1][j])%MOD;
            }
            for(int j = 0; j <= nums[i]; j++){
                // int res = 0;
                // for(int k = 0; k <= min({j, nums[i-1],j + nums[i-1] - nums[i]}); k++){
                //     res = (res + f[i-1][k])%MOD;
                // }
                // f[i][j] = res;
                int x = min({j, nums[i-1],j + nums[i-1] - nums[i]});
                if(x < 0) f[i][j] = 0;
                else f[i][j] = pre[x];
            }
        }
        int ans = 0;
        for(int i = 0; i <= nums.back(); i++)
            ans = (ans + f[n-1][i])%MOD;
        return ans;
    }
};

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

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

相关文章

Camera Link 与 NI PCIe-1433 的工作原理及应用

Camera Link 是一种专为工业和科学成像应用设计的串行通信协议标准。它的主要优势在于能够提供高带宽、高可靠性的图像数据传输&#xff0c;并且具备灵活的配置选项&#xff0c;适用于多种不同的摄像机类型。Camera Link 的标准使得它在需要高速度、高分辨率图像传输的应用中得…

Java流程控制08:continue、break、goto

本节内容视频链接&#xff1a;https://www.bilibili.com/video/BV12J41137hu?p43&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p43&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 java中break和continue的作用和区别 在J…

通过kuboard界面配置ingress

安装 Ingress Controller&#xff0c;Kuboard 为您提供了一种快速安装 ingress-nginx 的方法&#xff0c;步骤如下所示。 1&#xff09;导航到集群的 集群管理 --> 网络 --> IngressClass 列表页&#xff0c;如下图所示&#xff1a; 2&#xff09;点击图中的 安装 Ingre…

WordPress美化节日灯笼插件,适合春节的时候使用

源码介绍&#xff1a; WordPress美化节日灯笼插件&#xff0c;适合每年过年的时候安在网站上使用&#xff0c;这款插件可以备用着&#xff0c;一款WordPress节日灯笼美化插件&#xff0c;可以给网页自动加一个灯笼效果使用说明&#xff1a;到网站WP后台 - 插件 - 安装插件 - 上…

可复制拖拽流程图

功能&#xff1a;如上图所示&#xff0c;从左侧拖拽源拖拽出模块后&#xff0c;在右侧显示。 源码&#xff1a;

【OpenCV 】插值的方法原理,图片缩放,矫正,边界填充

图像旋转 缩放 计算机中的图像是以数组的方式储存&#xff0c;每个位置储存了像素点的像素值。对图像进行旋转缩放&#xff0c;就是对数组进行操作&#xff0c;乘以对应的矩阵&#xff0c;进行空间变换&#xff0c;而矩阵的行列式的值&#xff0c;就是缩放的倍数。 进行缩放旋…

stm32智能颜色送餐小车(ESP8266WIFI模块、APP制作、物联网模型建立、MQTTFX)

大家好啊&#xff0c;我是情谊&#xff0c;今天我们来介绍一下我最近设计的stm32产品&#xff0c;我们在今年七月份的时候参加了光电设计大赛&#xff0c;我们小队使用的就是stm32的智能送餐小车&#xff0c;虽然止步于省赛&#xff0c;但是还是一次成长的经验吧&#xff0c;那…

在IntelliJ IDEA中使用Git推送项目

去gitee网站注册用户 gitee网站地址:https://gitee.com/ github网站地址:https://github.com/ 一、创建仓库 以下以gitee为例进行介绍&#xff0c;github操作雷同。 1、创建仓库 点击页面右上方的"“并选择"创建仓库” 2、设置仓库相关信息 首先输入仓库名&…

时序预测|基于PO-TCN-BiGRU的数据单变量和多变量时序预测Matlab程序 含基础模型对比TCN-BiGRU

时序预测|基于PO-TCN-BiGRU的数据单变量和多变量时序预测Matlab程序 含基础模型对比TCN-BiGRU 文章目录 前言时序预测|基于PO-TCN-BiGRU的数据单变量和多变量时序预测Matlab程序 含基础模型对比TCN-BiGRU 一、PO-TCN-BiGRU模型1. 时间卷积网络 (TCN)2. 双向门控循环单元 (BiGRU…

Modbus-RTU使用过程中的问题

此程序是在visual studio 2005的MFC程序中执行的&#xff0c;通过引入ModbusRTU.dll进行程序的编程&#xff0c;通过Dependency Walker工具查看ModbusRTU.dll中的静态函数如下&#xff1a; 在ModbusRTU.h文件中 MOD_API WORD RTUReadDiscreteInputs(BYTE nSlaveAddress, WORD …

接口自动化测试,介入时间以及整个流程规范是怎样的?

最近&#xff0c;小编身边有人提出一个问题&#xff1a; 背景 公司的接口自动化是从开发提测的时候开始用例设计开发的&#xff08;因为我们公司没有接口文档&#xff0c;只能等开发完成后自己抓包&#xff09;&#xff0c;也就是接口自动化开发和功能测试是同时进行的&#…

Ubuntu 基础使用

一、下载Vmware workstation 和ubuntu映像文件 二、安装虚拟机 三、安装完成之后打开程序&#xff0c;选择创建新的虚拟机 选择映射文件 编辑信息 这里尽量选择一个特定的位置 根据自己的要求设定 设置完成后等待自己安装不需要进行操作 出现登录页面表示安装成功 四、基本指令…

K8S系列——(一)、Ubuntu上安装Helm

在使用K8S搭建集群服务时&#xff0c;有时候需要用到Helm&#xff08;一个用于Kubernetes应用管理的工具&#xff09;&#xff0c;下面是在Ubuntu上安装Helm的过程。 1.更新系统软件包列表 sudo apt-get update2.安装必要的依赖项 sudo apt-get install apt-transport-https…

怎么在网络攻击中屹立不倒

在当今蓬勃发展的网络游戏产业中&#xff0c;服务器安全无疑是企业生存与发展的基石。面对互联网环境中无处不在的DDoS&#xff08;分布式拒绝服务&#xff09;与CC&#xff08;挑战碰撞&#xff09;攻击威胁&#xff0c;游戏服务器的防御能力与高效处理能力显得尤为重要。相较…

11.2.0.4 RAC 节点1重做操作系统后如何复原

环境描述&#xff1a;Redhat7.9 11.2.0.4 RAC 双节点 实验背景 群里有大佬在交流RAC中1个节点操作系统坏了如何修复&#xff0c;故有了该实验。 在正常的生产环境当中&#xff0c;有时候会遇到主机磁盘以及其他硬件故障导致主机OS系统无法启动&#xff0c;或者OS系统本身故障…

C语言 | Leetcode C语言题解之第342题4的幂

题目&#xff1a; 题解&#xff1a; bool isPowerOfFour(int n) {return n > 0 && (n & (n - 1)) 0 && n % 3 1; }

Python3 第八十八课 -- AI 绘画

目录 一. 前言 二. Windows 环境安装 三. Civitai 介绍 一. 前言 本文我们将为大家介绍如何基于一些开源的库来搭建一套自己的 AI 作图工具。 需要使用的开源库为 Stable Diffusion web UI&#xff0c;它是基于 Gradio 库的 Stable Diffusion 浏览器界面 Stable Diffusio…

驾校预约学习系统--论文pf

TOC springboot373驾校预约学习系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域…

HP惠普暗影精灵3代OMEN 15-ce0xx,15-ce007TX,15-ce509TX原厂Win10.1803系统镜像

hp暗影精灵III代游戏本笔记本电脑&#xff0c;恢复出厂开箱状态原装出厂Windows10系统安装下载&#xff0c;带恢复重置还原 适用型号&#xff1a;15-ce0xx,15-ce000 15-CE001TX、15-CE002TX、15-CE003TX、15-CE004TX、 15-CE005TX、15-CE006TX、15-CE007TX、15-CE008TX、 15-C…

Azure DevOps Server 数据库日志已满,TF30042: The database is full

Contents 1. 问题描述2. 处理方式 2.1 系统备份2.2 收缩日志2.3 恢复模式2.4 日志增长无法控制 1. 问题描述 Azure DevOps Server 作为微软的软件开发管理平台产品&#xff0c;理所当然地使用了微软的数据库软件SQL Server。 在一个大型的开发团队中&#xff0c;Azure DevOps S…