Leetcode - 周赛410

news2024/11/24 1:40:16

目录

一,3248. 矩阵中的蛇

二,3249. 统计好节点的数目

三,3250. 单调数组对的数目 I

dfs记忆化

dfs记忆化1:1改递推

四,3251. 单调数组对的数目 II


一,3248. 矩阵中的蛇

本题就是一道纯模拟题,只需要模拟蛇移动后的下标(i,j),最终返回 i * n + j,代码如下:

class Solution {
    public int finalPositionOfSnake(int n, List<String> commands) {
        int i = 0, j = 0;
        for(String x : commands){
            if("UP".equals(x)){
                i--;
            }else if("RIGHT".equals(x)){
                j++;
            }else if("DOWN".equals(x)){
                i++;
            }else if("LEFT".equals(x)){
                j--;
            }
        }
        return (i * n) + j;
    }
}

二,3249. 统计好节点的数目

本题就是一道关于树的问题,画个图理解一下:

可以使用dfs从下往上不断求出每颗子树的节点数,同时判断对于每一个节点,它的子树的节点数是否相同,相同加一,求出答案。

代码如下:

class Solution {
    public int countGoodNodes(int[][] edges) {
        int n = edges.length + 1;
        List<Integer>[] g = new ArrayList[n];
        Arrays.setAll(g, e->new ArrayList<>());
        for(int[] e : edges){
            g[e[0]].add(e[1]);
            g[e[1]].add(e[0]);
        }
        dfs(0, -1, g);
        return ans;
    }
    int ans = 0;
    int dfs(int x, int fa, List<Integer>[] g){
        int t = -1;
        boolean flg = true;
        int sum = 1;
        for(int y : g[x]){
            if(y != fa){//防止遍历已经遍历过的节点
                int size = dfs(y, x, g) + 1;//记录x的子树节点是数量
                sum += size;
                
                //判断x的子树节点数量是否相同
                if(t == -1) t = size;
                else if(t != size) flg = false;
            }
        }
        if(flg) ans++;//如果相同,加一
        return sum;
    }
}

三,3250. 单调数组对的数目 I

dfs记忆化

此时我们需要定义dfs,首先一定有一个参数 i 表示下标,同时题目要求arr1数组递增,arr2数组递减,所以我们需要知道arr1,arr2数组的前一个数X,Y,但是题目告诉我们X+Y=nums[i],所以只需要知道X,Y其中一个就行,这里用的是X。定义dfs(i,X):arr1[i-1] = X,arr2[i-1] = nums[i-1] - X时,nums数组在 [i,n-1] 所能组成的单调数组对。

代码如下:

class Solution {
    int MOD = (int)1e9 + 7;
    public int countOfPairs(int[] nums) {
        memo = new int[nums.length][51];
        for(int i=0; i<nums.length; i++)
            Arrays.fill(memo[i], -1);
        int ans = 0;
        for(int x=0; x<=nums[0]; x++){
            ans = (ans + dfs(1, x, nums))%MOD; 
        }
        return ans;
    }
    int[][] memo;
    int dfs(int i, int x, int[] nums){
        if(i == nums.length) return 1;
        if(memo[i][x] != -1) return memo[i][x];
        int res = 0;
        int y = nums[i-1] - x;
        //y >= nums[i] - j <= arr2数组是递减的
        //nums[i-1] - x >= nums[i] - j
        //j >= nums[i] - nums[i-1] + x
        //j >= x <= arr1数组是递增的
        for(int j=Math.max(x, nums[i] - nums[i-1] + x); j<=nums[i]; j++){
            res = (res + dfs(i+1, j, nums)) % MOD;
        }
        return memo[i][x] = res;
    }
}

dfs记忆化1:1改递推

class Solution {
    int MOD = (int)1e9 + 7;
    public int countOfPairs(int[] nums) {
        int n = nums.length;
        int[][] f = new int[n+1][51];
        Arrays.fill(f[n], 1);
        for(int i=n-1; i>0; i--){
            for(int x=0; x<=nums[i]; x++){
                int y = nums[i-1] - x;
                int res = 0;
                for(int j=Math.max(x, nums[i] - nums[i-1] + x); j<=nums[i]; j++){
                    res = (res + f[i+1][j]) % MOD;
                }
                f[i][x] = res;
            }
        }
        int ans = 0;
        for(int x=0; x<=nums[0]; x++){
            ans = (ans + f[1][x])%MOD; 
        }
        return ans;
    }
}

对比

四,3251. 单调数组对的数目 II

本题和上一题一样,只不过范围变大了,所以需要进一步优化:

 

代码如下:

class Solution {
    int MOD = (int)1e9 + 7;
    public int countOfPairs(int[] nums) {
        int n = nums.length;
        int[][] f = new int[n+1][1001];
        Arrays.fill(f[n], 1);
        for(int i=n-1; i>0; i--){
            int[] s = new int[nums[i]+1];
            s[0] = f[i+1][0];
            for(int j=1; j<=nums[i]; j++)
                s[j] = (s[j-1] + f[i+1][j])%MOD;
            for(int x=0; x<=nums[i]; x++){
                int y = nums[i-1] - x;
                //int res = 0;
                // for(int j=Math.max(x, nums[i] - nums[i-1] + x); j<=nums[i]; j++){
                //     res = (res + f[i+1][j]) % MOD;
                // }
                int t = Math.max(x, nums[i] - nums[i-1] + x)-1;
                int res = (s[nums[i]] - (t>=0 && t <= nums[i] ? s[t] : 0) + MOD)%MOD;
                f[i][x] = res;
            }
        }
        int ans = 0;
        for(int x=0; x<=nums[0]; x++){
            ans = (ans + f[1][x])%MOD; 
        }
        return ans;
    }
}

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

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

相关文章

JavaScript Web API入门day3

目录 1.事件流 1.1 事件流和两个阶段说明 1.2 事件捕获 1.3 事件冒泡 1.4 阻止冒泡 1.5 解除默认行为 1.6 解绑事件 2.事件委托 3.其他事件 3.1 页面加载事件 3.1.1 load方式 3.1.2 DOMContentLoaded 3.2 元素滚动事件 3.2.1 什么是元素滚动事件 3.2.2 获取元素…

【qt小系统】通过qt折线图实现论文内容-快餐店排队效能分析

摘要&#xff1a; 商户收银需求与收银能力不匹配&#xff0c;是一个普遍问题&#xff0c;高峰不足/平常过剩。参考论文《混合制排队模型下中式快餐店排队系统的优化_荣艳蕊.pdf》&#xff0c;本文主要使用QT5、QtChart等完成了基于以上论文模型的关于排队模型优化的图表对比功能…

精品UI资源下载分享类响应式模板素材资源下载站源码

在其他网站看到的这个源码&#xff0c;感觉UI挺漂亮的&#xff0c;就搬来了。 感兴趣的自己下载后搭建下看看&#xff0c;个人感觉UI很漂亮 2024/8/10修复&#xff1a; 标签页面显示的文章跳转链接不正确 源码下载&#xff1a;https://download.csdn.net/download/m0_66047…

开源免费的表单收集系统TDuck

TDuck&#xff08;填鸭表单&#xff09;是一款开源免费的表单收集系统&#xff0c;它基于Apache 2.0协议开源&#xff0c;用户可以随时下载源码&#xff0c;自由修改和定制&#xff0c;也可以参与到项目的贡献和反馈中。TDuck表单系统不仅支持私有化部署&#xff0c;还提供了丰…

uniapp预览图片uni.previewImage图片放大

<image v-if"file.image!" :src"file.image" click"previewImage(file.image)"></image>file: {image: ,status: 1}, // 预览 图片previewImage() {uni.previewImage({current: 1,urls: [this.img] // 是个 数组 单张的&#xff08…

【产品那些事】什么是应用程序安全态势管理(ASPM)?

文章目录 前言当前应用安全(AppSec)推进遇到的问题关于ASPM的定义 为什么需要ASPM&#xff1a;B端客户核心需求ASPM产品关键策略理想状态下的ASPMASPM与CSPM的区别国内外产品参考 前言 随着现代软件开发实践的快速演变&#xff0c;特别是在敏捷开发和 DevOps 的推动下&#xf…

与人工智能相比,人类智能里包含有信仰

信仰是人类智能的一个重要方面&#xff0c;它影响我们的意图、动机、决策和行为。 人类智能中信仰是一种独特的因素&#xff0c;影响我们如何看待世界、做决定以及形成价值观。与此相比&#xff0c;人工智能虽然可以处理大量数据并模拟决策过程&#xff0c;但它不具备信仰、情感…

哈尔滨等保测评的政策解读与最佳实践分享

哈尔滨&#xff0c;这座北方城市&#xff0c;在数字化转型的浪潮中&#xff0c;对网络安全的重视程度日益提升。其中&#xff0c;等保测评&#xff08;等级保护测评&#xff09;作为信息安全领域的基石政策&#xff0c;正引领企业构建坚不可摧的安全防线。今天&#xff0c;就让…

[Qt][对话框][下]详细讲解

目录 1.Qt内置对话框0.有哪些1.消息对话框 QMessageBox2.颜色对话框 QColorDialog3.⽂件对话框 QFileDialog4.字体对话框 QFontDialog5.输⼊对话框 QInputDialog6.进度条对话框 QProgressDialog 1.Qt内置对话框 0.有哪些 Qt提供了多种可复⽤的对话框类型&#xff0c;即Qt标准…

媒体邀约新闻稿宣发的意义和作用?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约新闻稿的宣发对于企业活动来说具有重要的意义和作用。这不仅能够提升企业的知名度和形象&#xff0c;还能扩大活动的影响力&#xff0c;增加媒体报道的机会&#xff0c;并建立积…

【基础解读】神奇宝贝多分类——Classification:Probabilistic Generative Model

背景 问题定义 尝试用Regression的方法解决Classification 尝试用概率的方式解决Classification 求一个个体被选中并来自于某一类的概率——贝叶斯 进行Classification 结果分析 模型调整——共用convariance matrix 结果分析 总结

Unity动画模块 之 简单创建一个序列帧动画

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​ 1.什么是序列帧动画 序列帧动画简单来讲就是通过连续播放一系列静态图像&#xff0c;形成动态视觉效果的过程&#xff…

Godot《躲避小兵》实战之设置项目

通过之前的学习我们已经基本了解了godot的界面&#xff0c;知道如何创建项目以及节点。那么&#xff0c;从这一章节我们将进入godot官方给我们提供的一个2D游戏开发的小教程进行入手&#xff0c;这个游戏并不是我自己的作品&#xff0c;而是我通过学习完之后&#xff0c;对其进…

Linux-软件管理

文章目录 19. 软件管理19.1 linux软件介绍19.2 RPM包概述19.3 RPM软件包安装19.4 RPM软件包依赖问题19.5 DPKG软件包19.6 linux 软件包前端工具19.7 windows 前端工具winget19.8 linux 前端工具yum概述19.9 设置yum远程仓库19.10 yum 软件包管理19.11 epel软件仓库19.12 yum本地…

机器学习中的距离概念

距离在机器学习中应用广泛&#xff0c;包括欧式距离、曼哈顿距离、内积距离和KL距离。 下面总结一下。 机器学习中的距离 欧式距离曼哈顿距离内积距离KL距离距离作为损失函数(MSE/MAE...)欧式距离与内积距离的联系☆距离的有效性 欧式距离 欧式距离&#xff08;Euclidean Dis…

数学建模——评价决策类算法Python版(灰色关联分析、主成分分析)

一、灰色关联分析 模型原理 解题步骤 例题 某公司考虑在几个候选城市中开设新的零售店。公司收集了以下数据&#xff0c;包括候选城市的GDP、人口、交通便利程度、商业发展水平等指标。公司希望使用灰色关联分析法来评估这些指标与零售店成功可能性之间的关系&#xff0c;以…

sql注入绕过+rce

目录 1、mysql编码绕过 1.1、环境搭建 1.1.1、源码 1.1.2、数据库 1.1.3、检测环境 1.2、绕过技巧 1.2.1、直接使用admin&#xff0c;查询数据&#xff0c;发现权限被拒绝 1.2.2、加上单引号绕过了&#xff0c;但是查询不到数据 1.2.3、试试其他特殊字符&#xff0c;发…

python循环——九九乘法表(更加轻松的理解循环结构)

感受 首先&#xff0c;得明确意识到这个问题&#xff0c;就是我的循环结构学的一塌糊涂&#xff0c;完全不能很好的使用这个循环来实现各种九九乘法表达输出&#xff0c;这样的循环结构太差了&#xff0c;还需要我自己找时间来补充一下循环的使用&#xff0c;来拓宽自己的思考方…

【开端】Java 分页工具类运用

一、绪论 Java系统中&#xff0c;分页查询的场景随处可见&#xff0c;本节介com.baomidou.mybatisplus.core.metadata.IPage;来分页的工具类 二、分页工具类 public class PageUtils implements Serializable { private static final long serialVersionUID 1L; /**…

服务器安装哪吒面板详细教程

本文长期更新地址&#xff1a; 服务器安装哪吒面板详细教程-星零岁的博客https://blog.0xwl.com/13568.html 注&#xff1a;本文中部分内容源自网络&#xff0c;第四步中部分来自本人曾经文章&#xff1a;云服务器安装配置宝塔面板并安装基础运行环境教程-星零岁的博客 今天来讲…