当前位置: 首页 > news >正文

Leetcode - 周赛410

目录

一,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;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 企业如何组建安全稳定的跨国通信网络
  • Android SystemServer启动流程
  • 有什么蓝牙耳机值得推荐一下吗?百元开放式耳机选购指南
  • 240810-Gradio通过HTML组件打开本地文件+防止网页跳转到about:blank
  • linux下ETCD安装、配置、命令
  • 如何让键盘F2功能键设置成重命名键(Fn+Esc)
  • SAM2部署过程中pip install -e . 报错:‘gbk‘ codec can‘t decode byte 0xa4
  • 【自动驾驶】ROS中的重名问题:工作空间、节点、参数
  • 总投资额超1320亿!上半年文旅项目投资盘点,康养/红色/智慧旅游等六大赛道受资本青睐
  • <数据集>车间工人、安全帽、安全背心识别<目标检测>
  • 九、OpenCVSharp 中的图像形态学操作
  • 【c语言】预处理、宏定义相关知识
  • 【生成式人工智能-四-chatgpt的训练过程-pretrain预训练自督导式学习督导式学习】
  • 学习008-02-05-03 Highlight Property Editors(突出显示属性编辑器)
  • 每日面试题Day2
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 08.Android之View事件问题
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CEF与代理
  • css的样式优先级
  • Cumulo 的 ClojureScript 模块已经成型
  • DataBase in Android
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Redis字符串类型内部编码剖析
  • Sass 快速入门教程
  • Spark学习笔记之相关记录
  • Spring Cloud中负载均衡器概览
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • windows下使用nginx调试简介
  • 阿里研究院入选中国企业智库系统影响力榜
  • - 概述 - 《设计模式(极简c++版)》
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 聊一聊前端的监控
  • 通过git安装npm私有模块
  • 通信类
  • 详解移动APP与web APP的区别
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $.ajax()参数及用法
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (web自动化测试+python)1
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (九)信息融合方式简介
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .net Application的目录
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能